<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hadoop on F嘉阳</title><link>https://blog.fjy8018.top/tags/hadoop/</link><description>Recent content in Hadoop on F嘉阳</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Thu, 07 Sep 2023 15:02:52 +0800</lastBuildDate><atom:link href="https://blog.fjy8018.top/tags/hadoop/index.xml" rel="self" type="application/rss+xml"/><item><title>HBase伪分布式安装</title><link>https://blog.fjy8018.top/archives/195/</link><pubDate>Sat, 15 Dec 2018 19:18:00 +0800</pubDate><guid>https://blog.fjy8018.top/archives/195/</guid><description>&lt;h2 id="hadoop伪分布式安装"&gt;&lt;a href="#hadoop%e4%bc%aa%e5%88%86%e5%b8%83%e5%bc%8f%e5%ae%89%e8%a3%85" class="header-anchor"&gt;&lt;/a&gt;Hadoop伪分布式安装&#10;&lt;/h2&gt;&lt;h3 id="基础环境"&gt;&lt;a href="#%e5%9f%ba%e7%a1%80%e7%8e%af%e5%a2%83" class="header-anchor"&gt;&lt;/a&gt;基础环境&#10;&lt;/h3&gt;&lt;ol&gt;&#10;&lt;li&gt;Hadoop：版本2.7.3，&lt;a class="link" href="https://archive.apache.org/dist/hadoop/core/hadoop-2.7.3/hadoop-2.7.3.tar.gz" target="_blank" rel="noopener"&#10; &gt;下载地址&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;HBase：版本1.2.4，&lt;a class="link" href="http://archive.apache.org/dist/hbase/1.2.4/hbase-1.2.4-bin.tar.gz" target="_blank" rel="noopener"&#10; &gt;下载地址&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;JDK8&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;jdk 安装命令&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ yum -y install java-devel java&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;查看当前系统jre和jdk路径，输入&lt;code&gt;update-alternatives --config java&lt;/code&gt;和&lt;code&gt;update-alternatives --config javac&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ update-alternatives --config java&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;共有 &lt;span class="m"&gt;1&lt;/span&gt; 个提供“java”的程序。&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 选项 命令&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-----------------------------------------------&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;*+ &lt;span class="m"&gt;1&lt;/span&gt; java-1.8.0-openjdk.x86_64 &lt;span class="o"&gt;(&lt;/span&gt;/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/bin/java&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ update-alternatives --config javac&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;共有 &lt;span class="m"&gt;1&lt;/span&gt; 个提供“javac”的程序。&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 选项 命令&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-----------------------------------------------&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;*+ &lt;span class="m"&gt;1&lt;/span&gt; java-1.8.0-openjdk.x86_64 &lt;span class="o"&gt;(&lt;/span&gt;/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/bin/javac&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;查看环境&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ ll&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;总用量 &lt;span class="m"&gt;311132&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-rw-------. &lt;span class="m"&gt;1&lt;/span&gt; root root &lt;span class="m"&gt;1241&lt;/span&gt; 8月 &lt;span class="m"&gt;11&lt;/span&gt; 10:53 anaconda-ks.cfg&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-rw-r--r--. &lt;span class="m"&gt;1&lt;/span&gt; root root &lt;span class="m"&gt;214092195&lt;/span&gt; 8月 &lt;span class="m"&gt;26&lt;/span&gt; &lt;span class="m"&gt;2016&lt;/span&gt; hadoop-2.7.3.tar.gz&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-rw-r--r--. &lt;span class="m"&gt;1&lt;/span&gt; root root &lt;span class="m"&gt;104497899&lt;/span&gt; 10月 &lt;span class="m"&gt;26&lt;/span&gt; &lt;span class="m"&gt;2016&lt;/span&gt; hbase-1.2.4-bin.tar.gz&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ java -version&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;openjdk version &lt;span class="s2"&gt;&amp;#34;1.8.0_191&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;OpenJDK Runtime Environment &lt;span class="o"&gt;(&lt;/span&gt;build 1.8.0_191-b12&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;OpenJDK 64-Bit Server VM &lt;span class="o"&gt;(&lt;/span&gt;build 25.191-b12, mixed mode&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ javac -version&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;javac 1.8.0_191&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="免密登录"&gt;&lt;a href="#%e5%85%8d%e5%af%86%e7%99%bb%e5%bd%95" class="header-anchor"&gt;&lt;/a&gt;免密登录&#10;&lt;/h3&gt;&lt;p&gt;新建hadoop用户，忽略密码强度提示&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ adduser hadoop&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ passwd hadoop&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;为方便远程连接和学习，同时授予root权限，输入&lt;code&gt;whereis sudoers&lt;/code&gt;查看权限控制文件位置&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ whereis sudoers&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudoers: /etc/sudoers /etc/sudoers.d /usr/libexec/sudoers.so /usr/share/man/man5/sudoers.5.gz&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;vi /etc/sudoers&lt;/code&gt;修改内容为&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;root ALL=(ALL) ALL&#10;hadoop ALL=(ALL) ALL&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;切换至&lt;code&gt;hadoop&lt;/code&gt;用户，使用 &lt;code&gt;ssh-keygen -t rsa&lt;/code&gt;生成私钥信息，位置在&lt;code&gt;/home/hadoop/&lt;/code&gt;，并且忽略所有提示输入的信息&lt;/p&gt;&#10;&lt;p&gt;查看生成的文件，该SSH文件夹为隐藏文件夹，故用&lt;code&gt;ls -a&lt;/code&gt;查看，可见自动生成了&lt;code&gt;.ssh&lt;/code&gt;目录和&lt;code&gt;id_rsa&lt;/code&gt;,&lt;code&gt;id_rsa.pub&lt;/code&gt;两个文件&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ ls /home/hadoop/.ssh/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;id_rsa id_rsa.pub&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;复制公钥到.ssh目录&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;免密测试&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ ssh localhost&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;The authenticity of host &lt;span class="s1"&gt;&amp;#39;localhost (::1)&amp;#39;&lt;/span&gt; can&lt;span class="s1"&gt;&amp;#39;t be established.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;ECDSA key fingerprint is SHA256:3UEr3lx2jznmN3FL3SflViR05IZe6AWweb3TeSsfX0M.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;ECDSA key fingerprint is MD5:0f:31:c1:cc:54:69:7f:d8:8d:7c:8c:22:95:2e:03:4e.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;Are you sure you want to continue connecting (yes/no)? yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;Warning: Permanently added &amp;#39;&lt;/span&gt;localhost&lt;span class="err"&gt;&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;ECDSA&lt;span class="o"&gt;)&lt;/span&gt; to the list of known hosts.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Last login: Sat Dec &lt;span class="m"&gt;15&lt;/span&gt; 11:14:27 &lt;span class="m"&gt;2018&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ &lt;span class="nb"&gt;exit&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;登出&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Connection to localhost closed.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="安装hadoop"&gt;&lt;a href="#%e5%ae%89%e8%a3%85hadoop" class="header-anchor"&gt;&lt;/a&gt;安装Hadoop&#10;&lt;/h3&gt;&lt;p&gt;解压文件&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ tar -zxvf hadoop-2.7.3.tar.gz&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;修改配置文件&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ vi /hadoop-2.7.3/etc/hadoop/hadoop-env.sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;配置Java路径&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;# The java implementation to use.&#10;export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;修改HDFS配置&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ vi /hadoop-2.7.3/etc/hadoop/hdfs-site.xml&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;配置内容&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;dfs.replication&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9; &lt;span class="c"&gt;&amp;lt;!-- 配置副本数量--&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;1&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;dfs.namenode.name.dir&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;file:/home/hadoop/hadoop_data/dfs/name&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;dfs.namenode.data.dir&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;file:/home/hadoop/hadoop_data/dfs/data&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;手动创建相关目录&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ mkdir -p /home/hadoop/hadoop_data/dfs/name&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ mkdir -p /home/hadoop/hadoop_data/dfs/data&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;配置&lt;code&gt;core-site.xml&lt;/code&gt;，内容为&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;fs.defaultFS&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;&amp;lt;!-- 配置主机IP--&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;hdfs://0.0.0.0:8020&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;&amp;lt;!-- 配置临时文件位置--&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;hadoop.tmp.dir&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;file:/home/hadoop/hadoop_data&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;放行端口并重载&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ firewall-cmd --zone&lt;span class="o"&gt;=&lt;/span&gt;public --add-port&lt;span class="o"&gt;=&lt;/span&gt;8020/tcp --add-port&lt;span class="o"&gt;=&lt;/span&gt;50070/tcp --permanent&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ firewall-cmd --reload&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="启动hadoop"&gt;&lt;a href="#%e5%90%af%e5%8a%a8hadoop" class="header-anchor"&gt;&lt;/a&gt;启动Hadoop&#10;&lt;/h3&gt;&lt;h4 id="初始化"&gt;&lt;a href="#%e5%88%9d%e5%a7%8b%e5%8c%96" class="header-anchor"&gt;&lt;/a&gt;初始化&#10;&lt;/h4&gt;&lt;p&gt;进入&lt;code&gt;/hadoop-2.7.3/bin&lt;/code&gt;目录，使用如下语句初始化Hadoop，该操作仅执行一次即可，以后使用无需重复执行，否则执行后会删除当前hadoop上的所有文件&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ hadoop namenode -format&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;滚动均为&lt;code&gt;info&lt;/code&gt;级别的日志并且&lt;code&gt;status 0&lt;/code&gt;表示已初始化成功&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;...&#10;18/12/15 17:07:32 INFO namenode.FSImage: Allocated new BlockPoolId: BP-99731851-127.0.0.1-1544864852133&#10;18/12/15 17:07:32 INFO common.Storage: Storage directory /home/hadoop/hadoop_data/dfs/name has been successfully formatted.&#10;18/12/15 17:07:32 INFO namenode.FSImageFormatProtobuf: Saving image file /home/hadoop/hadoop_data/dfs/name/current/fsimage.ckpt_0000000000000000000 using no compression&#10;18/12/15 17:07:32 INFO namenode.FSImageFormatProtobuf: Image file /home/hadoop/hadoop_data/dfs/name/current/fsimage.ckpt_0000000000000000000 of size 353 bytes saved in 0 seconds.&#10;18/12/15 17:07:32 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid &amp;gt;= 0&#10;18/12/15 17:07:32 INFO util.ExitUtil: Exiting with status 0&#10;18/12/15 17:07:32 INFO namenode.NameNode: SHUTDOWN_MSG: &#10;/************************************************************&#10;SHUTDOWN_MSG: Shutting down NameNode at localhost/127.0.0.1&#10;************************************************************/&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="启动hdfs"&gt;&lt;a href="#%e5%90%af%e5%8a%a8hdfs" class="header-anchor"&gt;&lt;/a&gt;启动HDFS&#10;&lt;/h4&gt;&lt;p&gt;进入&lt;code&gt;/hadoop-2.7.3/sbin&lt;/code&gt;目录输入&lt;code&gt;./start-dfs.sh&lt;/code&gt;启动HDFS服务&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ ./start-dfs.sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Starting namenodes on &lt;span class="o"&gt;[&lt;/span&gt;0.0.0.0&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;The authenticity of host &lt;span class="s1"&gt;&amp;#39;0.0.0.0 (0.0.0.0)&amp;#39;&lt;/span&gt; can&lt;span class="s1"&gt;&amp;#39;t be established.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;ECDSA key fingerprint is SHA256:3UEr3lx2jznmN3FL3SflViR05IZe6AWweb3TeSsfX0M.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;ECDSA key fingerprint is MD5:0f:31:c1:cc:54:69:7f:d8:8d:7c:8c:22:95:2e:03:4e.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;Are you sure you want to continue connecting (yes/no)? yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;0.0.0.0: Warning: Permanently added &amp;#39;&lt;/span&gt;0.0.0.0&lt;span class="err"&gt;&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;ECDSA&lt;span class="o"&gt;)&lt;/span&gt; to the list of known hosts.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0.0.0.0: starting namenode, logging to /home/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-namenode-localhost.localdomain.out&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;localhost: starting datanode, logging to /home/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-datanode-localhost.localdomain.out&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Starting secondary namenodes &lt;span class="o"&gt;[&lt;/span&gt;0.0.0.0&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0.0.0.0: starting secondarynamenode, logging to /home/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-secondarynamenode-localhost.localdomain.out&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;进程验证，若出现如下四个进程表示HDFS服务启动成功&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ jps&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;28930&lt;/span&gt; Jps&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;28821&lt;/span&gt; SecondaryNameNode&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;28663&lt;/span&gt; DataNode&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;28541&lt;/span&gt; NameNode&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="配置hdfs命令"&gt;&lt;a href="#%e9%85%8d%e7%bd%aehdfs%e5%91%bd%e4%bb%a4" class="header-anchor"&gt;&lt;/a&gt;配置hdfs命令&#10;&lt;/h3&gt;&lt;p&gt;使用&lt;code&gt;vi ~/.bash_profile&lt;/code&gt;进入配置文件，按如下配置&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;HADOOP_HOME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/home/hadoop/hadoop-2.7.3&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$HADOOP_HOME&lt;/span&gt;/bin:&lt;span class="nv"&gt;$PATH&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;使配置文件生效&lt;code&gt;source ~/.bash_profile&lt;/code&gt;&#10;输入&lt;code&gt;hdfs&lt;/code&gt;回车测试命令是否生效，若出现如下画面则表示命令已经生效&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ hdfs&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Usage: hdfs &lt;span class="o"&gt;[&lt;/span&gt;--config confdir&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;--loglevel loglevel&lt;span class="o"&gt;]&lt;/span&gt; COMMAND&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; where COMMAND is one of:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; dfs run a filesystem &lt;span class="nb"&gt;command&lt;/span&gt; on the file systems supported in Hadoop.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; classpath prints the classpath&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; namenode -format format the DFS filesystem&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; secondarynamenode run the DFS secondary namenode&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; namenode run the DFS namenode&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; journalnode run the DFS journalnode&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; zkfc run the ZK Failover Co&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ...&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="命令测试"&gt;&lt;a href="#%e5%91%bd%e4%bb%a4%e6%b5%8b%e8%af%95" class="header-anchor"&gt;&lt;/a&gt;命令测试&#10;&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ hadoop fs -mkdir /test&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ hadoop fs -ls /&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Found &lt;span class="m"&gt;1&lt;/span&gt; items&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;drwxr-xr-x - hadoop supergroup &lt;span class="m"&gt;0&lt;/span&gt; 2018-12-15 17:14 /test&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="hbase伪分布式搭建"&gt;&lt;a href="#hbase%e4%bc%aa%e5%88%86%e5%b8%83%e5%bc%8f%e6%90%ad%e5%bb%ba" class="header-anchor"&gt;&lt;/a&gt;HBase伪分布式搭建&#10;&lt;/h2&gt;&lt;h3 id="hbase安装"&gt;&lt;a href="#hbase%e5%ae%89%e8%a3%85" class="header-anchor"&gt;&lt;/a&gt;HBase安装&#10;&lt;/h3&gt;&lt;p&gt;解压安装包，目录如下&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ ll&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;总用量 &lt;span class="m"&gt;320&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;drwxr-xr-x. &lt;span class="m"&gt;4&lt;/span&gt; hadoop hadoop &lt;span class="m"&gt;4096&lt;/span&gt; 1月 &lt;span class="m"&gt;29&lt;/span&gt; &lt;span class="m"&gt;2016&lt;/span&gt; bin&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-rw-r--r--. &lt;span class="m"&gt;1&lt;/span&gt; hadoop hadoop &lt;span class="m"&gt;122439&lt;/span&gt; 10月 &lt;span class="m"&gt;26&lt;/span&gt; &lt;span class="m"&gt;2016&lt;/span&gt; CHANGES.txt&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;drwxr-xr-x. &lt;span class="m"&gt;2&lt;/span&gt; hadoop hadoop &lt;span class="m"&gt;178&lt;/span&gt; 1月 &lt;span class="m"&gt;29&lt;/span&gt; &lt;span class="m"&gt;2016&lt;/span&gt; conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;drwxr-xr-x. &lt;span class="m"&gt;12&lt;/span&gt; hadoop hadoop &lt;span class="m"&gt;4096&lt;/span&gt; 10月 &lt;span class="m"&gt;26&lt;/span&gt; &lt;span class="m"&gt;2016&lt;/span&gt; docs&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;drwxr-xr-x. &lt;span class="m"&gt;7&lt;/span&gt; hadoop hadoop &lt;span class="m"&gt;80&lt;/span&gt; 10月 &lt;span class="m"&gt;26&lt;/span&gt; &lt;span class="m"&gt;2016&lt;/span&gt; hbase-webapps&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-rw-rw-r--. &lt;span class="m"&gt;1&lt;/span&gt; hadoop hadoop &lt;span class="m"&gt;261&lt;/span&gt; 10月 &lt;span class="m"&gt;26&lt;/span&gt; &lt;span class="m"&gt;2016&lt;/span&gt; LEGAL&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;drwxrwxr-x. &lt;span class="m"&gt;3&lt;/span&gt; hadoop hadoop &lt;span class="m"&gt;8192&lt;/span&gt; 12月 &lt;span class="m"&gt;15&lt;/span&gt; 11:24 lib&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-rw-rw-r--. &lt;span class="m"&gt;1&lt;/span&gt; hadoop hadoop &lt;span class="m"&gt;130696&lt;/span&gt; 10月 &lt;span class="m"&gt;26&lt;/span&gt; &lt;span class="m"&gt;2016&lt;/span&gt; LICENSE.txt&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-rw-rw-r--. &lt;span class="m"&gt;1&lt;/span&gt; hadoop hadoop &lt;span class="m"&gt;42025&lt;/span&gt; 10月 &lt;span class="m"&gt;26&lt;/span&gt; &lt;span class="m"&gt;2016&lt;/span&gt; NOTICE.txt&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-rw-r--r--. &lt;span class="m"&gt;1&lt;/span&gt; hadoop hadoop &lt;span class="m"&gt;1477&lt;/span&gt; 12月 &lt;span class="m"&gt;27&lt;/span&gt; &lt;span class="m"&gt;2015&lt;/span&gt; README.txt&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;拷贝Hadoop配置文件到&lt;code&gt;/conf&lt;/code&gt;目录&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ cp /home/hadoop/hadoop-2.7.3/etc/hadoop/hdfs-site.xml .&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ cp /home/hadoop/hadoop-2.7.3/etc/hadoop/core-site.xml .&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;修改&lt;code&gt;hbase-env.sh&lt;/code&gt;文件，增加JDK路径&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# The java implementation to use. Java 1.7+ required.&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;JAVA_HOME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;由于使用的是jdk8，主要注释内存配置&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Configure PermSize. Only needed in JDK7. You can safely remove it for JDK8+&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#export HBASE_MASTER_OPTS=&amp;#34;$HBASE_MASTER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#export HBASE_REGIONSERVER_OPTS=&amp;#34;$HBASE_REGIONSERVER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;另外打开文件最后zookeeper配置，设置为使用内置的zookeeper&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Tell HBase whether it should manage it&amp;#39;s own instance of Zookeeper or not.&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;HBASE_MANAGES_ZK&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;修改&lt;code&gt;hbase-site.xml&lt;/code&gt;文件，内容如下&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;hbase.rootdir&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;&amp;lt;!-- 配置文件根目录--&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;hdfs://localhost:8020/hbase&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;hbase.zookeeper.property.dataDir&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;/home/hadoop/hadoop_data/zookeeper&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;hbase.cluster.distributed&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;&amp;lt;!-- 配置以集群方式运行--&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;true&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a class="link" href="https://hbase.apache.org/book.html" target="_blank" rel="noopener"&#10; &gt;参考文档&lt;/a&gt;&lt;/p&gt;&#10;&lt;h3 id="启动hbase"&gt;&lt;a href="#%e5%90%af%e5%8a%a8hbase" class="header-anchor"&gt;&lt;/a&gt;启动HBase&#10;&lt;/h3&gt;&lt;p&gt;在&lt;code&gt;/bin&lt;/code&gt;目录下执行&lt;code&gt;./start-hbase.sh&lt;/code&gt;启动HBase&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ ./start-hbase.sh &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, &lt;span class="k"&gt;then&lt;/span&gt; you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads&lt;span class="o"&gt;=&lt;/span&gt;N&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, &lt;span class="k"&gt;then&lt;/span&gt; you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads&lt;span class="o"&gt;=&lt;/span&gt;N&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;localhost: starting zookeeper, logging to /home/hadoop/hbase-1.2.4/bin/../logs/hbase-hadoop-zookeeper-localhost.localdomain.out&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;localhost: OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, &lt;span class="k"&gt;then&lt;/span&gt; you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads&lt;span class="o"&gt;=&lt;/span&gt;N&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;starting master, logging to /home/hadoop/hbase-1.2.4/bin/../logs/hbase-hadoop-master-localhost.localdomain.out&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, &lt;span class="k"&gt;then&lt;/span&gt; you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads&lt;span class="o"&gt;=&lt;/span&gt;N&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;starting regionserver, logging to /home/hadoop/hbase-1.2.4/bin/../logs/hbase-hadoop-1-regionserver-localhost.localdomain.out&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;由于虚拟机只分配了单核单线程，GC警告暂时忽略&lt;/p&gt;&#10;&lt;p&gt;进程验证，确认启动成功&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ jps&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;28821&lt;/span&gt; SecondaryNameNode&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;28663&lt;/span&gt; DataNode&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;29911&lt;/span&gt; HRegionServer&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;29785&lt;/span&gt; HMaster&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;29724&lt;/span&gt; HQuorumPeer&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;28541&lt;/span&gt; NameNode&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;30303&lt;/span&gt; Jps&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;进入HBase命令行测试&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ ./hbase shell&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, &lt;span class="k"&gt;then&lt;/span&gt; you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads&lt;span class="o"&gt;=&lt;/span&gt;N&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SLF4J: Class path contains multiple SLF4J bindings.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SLF4J: Found binding in &lt;span class="o"&gt;[&lt;/span&gt;jar:file:/home/hadoop/hbase-1.2.4/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SLF4J: Found binding in &lt;span class="o"&gt;[&lt;/span&gt;jar:file:/home/hadoop/hadoop-2.7.3/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings &lt;span class="k"&gt;for&lt;/span&gt; an explanation.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SLF4J: Actual binding is of &lt;span class="nb"&gt;type&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;org.slf4j.impl.Log4jLoggerFactory&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;HBase Shell&lt;span class="p"&gt;;&lt;/span&gt; enter &lt;span class="s1"&gt;&amp;#39;help&amp;lt;RETURN&amp;gt;&amp;#39;&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; list of supported commands.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Type &lt;span class="s2"&gt;&amp;#34;exit&amp;lt;RETURN&amp;gt;&amp;#34;&lt;/span&gt; to leave the HBase Shell&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Version 1.2.4, r67592f3d062743907f8c5ae00dbbe1ae4f69e5af, Tue Oct &lt;span class="m"&gt;25&lt;/span&gt; 18:10:20 CDT &lt;span class="m"&gt;2016&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hbase&lt;span class="o"&gt;(&lt;/span&gt;main&lt;span class="o"&gt;)&lt;/span&gt;:001:0&amp;gt; status&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;1&lt;/span&gt; active master, &lt;span class="m"&gt;0&lt;/span&gt; backup masters, &lt;span class="m"&gt;1&lt;/span&gt; servers, &lt;span class="m"&gt;0&lt;/span&gt; dead, 2.0000 average load&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hbase&lt;span class="o"&gt;(&lt;/span&gt;main&lt;span class="o"&gt;)&lt;/span&gt;:002:0&amp;gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;查看其是否自动在HDFS上创建目录&lt;code&gt;/hbase&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ hadoop fs -ls /&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Found &lt;span class="m"&gt;2&lt;/span&gt; items&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;drwxr-xr-x - hadoop supergroup &lt;span class="m"&gt;0&lt;/span&gt; 2018-12-15 18:43 /hbase&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;drwxr-xr-x - hadoop supergroup &lt;span class="m"&gt;0&lt;/span&gt; 2018-12-15 17:14 /test&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>HBase 学习笔记</title><link>https://blog.fjy8018.top/archives/194/</link><pubDate>Sat, 15 Dec 2018 12:06:00 +0800</pubDate><guid>https://blog.fjy8018.top/archives/194/</guid><description>&lt;h2 id="概述"&gt;&lt;a href="#%e6%a6%82%e8%bf%b0" class="header-anchor"&gt;&lt;/a&gt;概述&#10;&lt;/h2&gt;&lt;h3 id="hbase-简介"&gt;&lt;a href="#hbase-%e7%ae%80%e4%bb%8b" class="header-anchor"&gt;&lt;/a&gt;HBase 简介&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;Hbase是一个分布式的、面向列的开源数据库&#10;&lt;ul&gt;&#10;&lt;li&gt;列式数据库：将列值统一存储&lt;/li&gt;&#10;&lt;li&gt;行式数据库：关系型数据库，将每一行值统一存储&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Hbase在Hadoop之上提供了类似于Bigtable的能力&#10;&lt;ul&gt;&#10;&lt;li&gt;Bigtable是压缩、高性能、高可扩展性的基于Google GFS文件系统的数据库，用于存储大规模的结构化数据，在扩展性和性能上有很大的优势&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Hbase不同于一般的关系数据库，它适合非结构化数据存储&#10;&lt;ul&gt;&#10;&lt;li&gt;非结构化数据：不能用二维表进行存储的数据，例如图片、文档等&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="hbase地位"&gt;&lt;a href="#hbase%e5%9c%b0%e4%bd%8d" class="header-anchor"&gt;&lt;/a&gt;Hbase地位&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;Apache基金会顶级项目&lt;/li&gt;&#10;&lt;li&gt;基于Hadoop核心HDFS系统进行数据存储，类似于Hive&lt;/li&gt;&#10;&lt;li&gt;可以存储超大数据并适合用来进行大数据的的&lt;strong&gt;实时查询&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="hbase与hdfs"&gt;&lt;a href="#hbase%e4%b8%8ehdfs" class="header-anchor"&gt;&lt;/a&gt;Hbase与HDFS&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;Hbase建立在Hadoop文件系统上，利用了Hadoop文件系统的容错能力&lt;/li&gt;&#10;&lt;li&gt;Hbase提供对数据&lt;strong&gt;随机实时读/写&lt;/strong&gt;访问功能&lt;/li&gt;&#10;&lt;li&gt;Hbase内部使用&lt;strong&gt;哈希表&lt;/strong&gt;存储索引，可将HDFS文件中的数据进行快速查找&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="适用场景"&gt;&lt;a href="#%e9%80%82%e7%94%a8%e5%9c%ba%e6%99%af" class="header-anchor"&gt;&lt;/a&gt;适用场景&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;瞬间写入量很大，常用数据库不好支持或者需要很高的成本支撑&lt;/li&gt;&#10;&lt;li&gt;数据需要长久保存，且数据量会持久增长到比较大的场景&lt;/li&gt;&#10;&lt;li&gt;Hbase不适合用于有join、多级索引、表关系复杂的数据模型&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="存储模型与原理"&gt;&lt;a href="#%e5%ad%98%e5%82%a8%e6%a8%a1%e5%9e%8b%e4%b8%8e%e5%8e%9f%e7%90%86" class="header-anchor"&gt;&lt;/a&gt;存储模型与原理&#10;&lt;/h2&gt;&lt;h3 id="cap定理"&gt;&lt;a href="#cap%e5%ae%9a%e7%90%86" class="header-anchor"&gt;&lt;/a&gt;CAP定理&#10;&lt;/h3&gt;&lt;p&gt;分布式系统的CAP理论：理论首先把分布式系统中的三个特性进行了如下归纳：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;一致性（C）：所有节点在同一时间具有相同的数据&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;可用性（A）：保证每个请求不管成功或者失败（包含节点宕机）都有响应，但不保证获取数据的正确性&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;分区容错性（P）：系统中任意信息的丢失或失败不会影响系统的继续运作。系统如果不能在时限内达成数据一致性，必须就当前操作在C和A之间做出选择。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Hbase为CP特性&lt;/p&gt;&#10;&lt;h3 id="acid"&gt;&lt;a href="#acid" class="header-anchor"&gt;&lt;/a&gt;ACID&#10;&lt;/h3&gt;&lt;p&gt;ACID的定义：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Atomic原子性&lt;/strong&gt;:所有的步骤要么全部完成要么一个也不会完成&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Consistent一致性&lt;/strong&gt;: 通过各种途径包括外键约束等任何写入数据库的数据都是有效的，不能发生表与表之间存在外键约束&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Isolated&lt;/strong&gt;隔离性: 一个未完成事务不会影响另外一个未完成事务&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Durable&lt;/strong&gt;持久性: 一旦一个事务被提交，它应该持久保存&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;HBase非强ACID&lt;/p&gt;&#10;&lt;h3 id="hbase概念"&gt;&lt;a href="#hbase%e6%a6%82%e5%bf%b5" class="header-anchor"&gt;&lt;/a&gt;HBase概念&#10;&lt;/h3&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;字段&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;概念&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;备注&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;NameSpace&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;类似RDBMS的“数据库”&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Table&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;表名必须是能用在文件路径里的合法名字&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;原因：每个表都会映射为HDFS的文件&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Row&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;在表里，每一行代表一个数据对象，每一行都以一个行键（Row Key）来唯一标识的，行键没有特定的数据类型，以二进制的字节进行存储&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Row Key&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;唯一标识一行记录，不可改变，只能删除&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Column&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;由Column family和Column qualifier组成，由（：）进行分隔&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;例如：family：qualifier&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Column family&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;在定义HBase表的时候需要提前设置好列族，表中所有的列都需要组织在列族里面&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;同一个列族的成员有相同的前缀，物理上，一个列族的成员都是储存在一起，用于存储优化&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Column qualifier（列限定符）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;列族中的数据通过列标识来进行映射，可以理解为一个键值对，Column qualifier就是Key&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;类似具体的列名&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Cell&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;每一个行键，列族和列标识共同组成的一个单元&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;无特定的数据类型，以二进制字节存储&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Timestamp&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;每个值都有一个Timestamp，作为该值特定版本的标识符&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;读未指定版本则返回最新版，写未指定时间则使用当前时间，HBase默认保留3个版本数据&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="hbase与传统关系数据库的区别"&gt;&lt;a href="#hbase%e4%b8%8e%e4%bc%a0%e7%bb%9f%e5%85%b3%e7%b3%bb%e6%95%b0%e6%8d%ae%e5%ba%93%e7%9a%84%e5%8c%ba%e5%88%ab" class="header-anchor"&gt;&lt;/a&gt;HBase与传统关系数据库的区别&#10;&lt;/h3&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Hbase&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;RDBMS&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;数据库大小&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;PB&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;GB、TB&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;数据类型&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Bytes&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;丰富的数据类型&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;事务支持&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ACID只支持单个Row级别&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;全面的ACID支持&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;索引&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;只支持Row-Key&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;支持&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;吞吐量&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;百万查询/每秒&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;数千查询/每秒&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h2 id="hbase基础架构"&gt;&lt;a href="#hbase%e5%9f%ba%e7%a1%80%e6%9e%b6%e6%9e%84" class="header-anchor"&gt;&lt;/a&gt;HBase基础架构&#10;&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2018/12/15/5c14dd85593e5.jpg" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="hbase1.jpg" class="gallery-image" data-flex-basis="402px" data-flex-grow="167" height="760" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/12/15/5c14dd85593e5.jpg" width="1274"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;h3 id="hbase分布式系统简介"&gt;&lt;a href="#hbase%e5%88%86%e5%b8%83%e5%bc%8f%e7%b3%bb%e7%bb%9f%e7%ae%80%e4%bb%8b" class="header-anchor"&gt;&lt;/a&gt;HBase分布式系统简介&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;HMaster&#10;&lt;ul&gt;&#10;&lt;li&gt;HBase主/从集群架构中的中央节点&lt;/li&gt;&#10;&lt;li&gt;负责将region（HBase中存储最小单元，表格的基本单位）分配给RegionServer，协调RegionServer的负载并维护集群状态&lt;/li&gt;&#10;&lt;li&gt;维护表和Region的元数据，不参与数据的输入/输出过程&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;RegionServer&#10;&lt;ul&gt;&#10;&lt;li&gt;维护HMaster分配给他的region，处理对这些region的IO请求&lt;/li&gt;&#10;&lt;li&gt;负责切分正在运行过程中变得过大的region&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Zookeeper&#10;&lt;ul&gt;&#10;&lt;li&gt;集群协调器，保证至少一个节点出于active状态&lt;/li&gt;&#10;&lt;li&gt;HMaster启动将系统表加载到ZK（用于服务发现）&lt;/li&gt;&#10;&lt;li&gt;提供HBase RegionServer状态信息&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="hbase原理"&gt;&lt;a href="#hbase%e5%8e%9f%e7%90%86" class="header-anchor"&gt;&lt;/a&gt;HBase原理&#10;&lt;/h2&gt;&lt;h3 id="hbase写流程"&gt;&lt;a href="#hbase%e5%86%99%e6%b5%81%e7%a8%8b" class="header-anchor"&gt;&lt;/a&gt;HBase写流程&#10;&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2018/12/15/5c14eab0b66f1.jpg" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="hbase2.jpg" class="gallery-image" data-flex-basis="471px" data-flex-grow="196" height="699" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/12/15/5c14eab0b66f1.jpg" width="1373"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Client先访问zookeeper，得到对应的RegionServer地址&lt;/li&gt;&#10;&lt;li&gt;Client对RegionServer发起写请求，RegionServer接受数据写入内存&lt;/li&gt;&#10;&lt;li&gt;当MemStore的大小达到一定值后，flush到StoreFile并存储到HDFS&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2018/12/15/5c14f18fb8065.jpg" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="hbase3.jpg" class="gallery-image" data-flex-basis="508px" data-flex-grow="212" height="704" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/12/15/5c14f18fb8065.jpg" width="1493"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;HBase特殊点在于其先写内存再写日志，通过类似MySQL中MVCC机制保证一致性&lt;/p&gt;&#10;&lt;h3 id="hbase读流程"&gt;&lt;a href="#hbase%e8%af%bb%e6%b5%81%e7%a8%8b" class="header-anchor"&gt;&lt;/a&gt;HBase读流程&#10;&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="https://i.loli.net/2018/12/15/5c14f377038f9.jpg" target="_blank" rel="noopener"&#10; &gt;&lt;img alt="hbase4.jpg" class="gallery-image" data-flex-basis="469px" data-flex-grow="195" height="710" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://i.loli.net/2018/12/15/5c14f377038f9.jpg" width="1388"&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Client先访问zookeeper，得到对应的RegionServer地址&lt;/li&gt;&#10;&lt;li&gt;Client对RegionServer发起读请求&lt;/li&gt;&#10;&lt;li&gt;当RegionServer收到client的读请求后，先扫描自己的Memstore，再扫描BlockCache（加速读内容缓存区）如果还没找到则从StoreFile中读取数据，然后将数据返回给Client&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h4 id="读特点"&gt;&lt;a href="#%e8%af%bb%e7%89%b9%e7%82%b9" class="header-anchor"&gt;&lt;/a&gt;读特点&#10;&lt;/h4&gt;&lt;ul&gt;&#10;&lt;li&gt;读过程与HMaster无关，只和ZK有关，有效的减小HMaster负载&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="hbase模块协作"&gt;&lt;a href="#hbase%e6%a8%a1%e5%9d%97%e5%8d%8f%e4%bd%9c" class="header-anchor"&gt;&lt;/a&gt;HBase模块协作&#10;&lt;/h3&gt;&lt;p&gt;有关HBase的三个问题&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;HBase启动时发生了什么&lt;/li&gt;&#10;&lt;li&gt;当RegionServer失效后会发生什么&lt;/li&gt;&#10;&lt;li&gt;当HMaster失效后会发生什么&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h4 id="hbase启动"&gt;&lt;a href="#hbase%e5%90%af%e5%8a%a8" class="header-anchor"&gt;&lt;/a&gt;HBase启动&#10;&lt;/h4&gt;&lt;ol&gt;&#10;&lt;li&gt;HBase启动，注册到zookeeper，等待RegionServer汇报&lt;/li&gt;&#10;&lt;li&gt;RegionServer注册到zookeeper，并向HMaster汇报&lt;/li&gt;&#10;&lt;li&gt;对各个RegionServer（包括失效的）的数据进行整理，分配Region和meta信息（所有表的索引）&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h4 id="regionserver失效"&gt;&lt;a href="#regionserver%e5%a4%b1%e6%95%88" class="header-anchor"&gt;&lt;/a&gt;RegionServer失效&#10;&lt;/h4&gt;&lt;ol&gt;&#10;&lt;li&gt;HMaster将失效RegionServer上的Region分配到其他节点&lt;/li&gt;&#10;&lt;li&gt;HMaster更新HBase：meta表保证数据正常访问&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h4 id="hmaster失效"&gt;&lt;a href="#hmaster%e5%a4%b1%e6%95%88" class="header-anchor"&gt;&lt;/a&gt;HMaster失效&#10;&lt;/h4&gt;&lt;p&gt;配置高可用后&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;出于Backup状态的其他HMaster节点选举出一个转为Active状态&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;未配置高可用&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;数据能正常读写，但不能创建删除表，也不能更改表结构，因为涉及meta表更新&lt;/li&gt;&#10;&lt;/ol&gt;&#10;</description></item><item><title>hadoop分布式搭建的一些坑</title><link>https://blog.fjy8018.top/archives/151/</link><pubDate>Sun, 22 Apr 2018 10:39:00 +0800</pubDate><guid>https://blog.fjy8018.top/archives/151/</guid><description>&lt;h2 id="datanode没启动"&gt;&lt;a href="#datanode%e6%b2%a1%e5%90%af%e5%8a%a8" class="header-anchor"&gt;&lt;/a&gt;DataNode没启动&#10;&lt;/h2&gt;&lt;p&gt;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="378px" data-flex-grow="157" height="163" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/28XPkG.png" width="257"&gt;&lt;/p&gt;&#10;&lt;p&gt;这种情况多出现于该机器之前配置过hadoop，没清理干净的情况，即仍有文件目录，导致新hadoop的clusterID与旧的不一致，导致HDFS无法启动，报JavaIO异常&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt; 2018-04-22 00:21:15,868 WARN org.apache.hadoop.hdfs.server.common.Storage: java.io.IOException: Incompatible clusterIDs in /www/hadoop/app/tmp/dfs/data: namenode clusterID = CID-6c7766c6-b260-42b6-8c03-07dda802c0cf; datanode clusterID = CID-a53df7ad-e593-4a29-ad15-a93486c54776&#10; 2018-04-22 00:21:15,868 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for Block pool &amp;lt;registering&amp;gt; (Datanode Uuid unassigned) service to hadoop0/192.168.79.129:8020. Exiting. &#10; java.io.IOException: All specified directories are failed to load.&#10; &#9;at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:478)&#10; &#9;at org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java:1394)&#10; &#9;at org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java:1355)&#10; &#9;at org.apache.hadoop.hdfs.server.datanode.BPOfferService.verifyAndSetNamespaceInfo(BPOfferService.java:317)&#10; &#9;at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandshake(BPServiceActor.java:228)&#10; &#9;at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:829)&#10; &#9;at java.lang.Thread.run(Thread.java:745)&#10; 2018-04-22 00:21:15,869 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Ending block pool service for: Block pool &amp;lt;registering&amp;gt; (Datanode Uuid unassigned) service to hadoop0/192.168.79.129:8020&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="603px" data-flex-grow="251" height="354" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/28Xx0j.png" width="890"&gt;&lt;/p&gt;&#10;&lt;h3 id="解决方案"&gt;&lt;a href="#%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88" class="header-anchor"&gt;&lt;/a&gt;解决方案&#10;&lt;/h3&gt;&lt;p&gt;清理所有节点的旧文件存储目录，重新再根节点格式化存储空间&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; rm -rf app/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; hdfs namenode -format&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;重新启动HDFS&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@hadoop0 bin&lt;span class="o"&gt;]&lt;/span&gt;$ &lt;span class="nb"&gt;cd&lt;/span&gt; ../sbin&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@hadoop0 sbin&lt;span class="o"&gt;]&lt;/span&gt;$ ./start-all.sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;查看进程，DataNode已启动&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@hadoop0 sbin&lt;span class="o"&gt;]&lt;/span&gt;$ jps&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;37618&lt;/span&gt; DataNode&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;37783&lt;/span&gt; SecondaryNameNode&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;37932&lt;/span&gt; ResourceManager&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;37485&lt;/span&gt; NameNode&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;38045&lt;/span&gt; NodeManager&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;38365&lt;/span&gt; Jps&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="nodemanager没启动启动后进程消失"&gt;&lt;a href="#nodemanager%e6%b2%a1%e5%90%af%e5%8a%a8%e5%90%af%e5%8a%a8%e5%90%8e%e8%bf%9b%e7%a8%8b%e6%b6%88%e5%a4%b1" class="header-anchor"&gt;&lt;/a&gt;NodeManager没启动/启动后进程消失&#10;&lt;/h2&gt;&lt;p&gt;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="620px" data-flex-grow="258" height="104" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/28XBRX.png" width="269"&gt;&lt;/p&gt;&#10;&lt;p&gt;该情况由于yarn-site.xml文件配置有误，导致从节点找不到主节点，报JavaNet异常&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt; org.apache.hadoop.yarn.exceptions.YarnRuntimeException: java.net.BindException: Problem binding to [hadoop0:0] java.net.BindException: 无法指定被请求的地址; For more details see: http://wiki.apache.org/hadoop/BindException&#10; &#9;at org.apache.hadoop.yarn.factories.impl.pb.RpcServerFactoryPBImpl.getServer(RpcServerFactoryPBImpl.java:139)&#10; &#9;at org.apache.hadoop.yarn.ipc.HadoopYarnProtoRPC.getServer(HadoopYarnProtoRPC.java:65)&#10; &#9;at org.apache.hadoop.yarn.ipc.YarnRPC.getServer(YarnRPC.java:54)&#10; &#9;at org.apache.hadoop.yarn.server.nodemanager.containermanager.ContainerManagerImpl.serviceStart(ContainerManagerImpl.java:406)&#10; &#9;at org.apache.hadoop.service.AbstractService.start(AbstractService.java:193)&#10; &#9;at org.apache.hadoop.service.CompositeService.serviceStart(CompositeService.java:120)&#10; &#9;at org.apache.hadoop.yarn.server.nodemanager.NodeManager.serviceStart(NodeManager.java:266)&#10; &#9;at org.apache.hadoop.service.AbstractService.start(AbstractService.java:193)&#10; &#9;at org.apache.hadoop.yarn.server.nodemanager.NodeManager.initAndStartNodeManager(NodeManager.java:475)&#10; &#9;at org.apache.hadoop.yarn.server.nodemanager.NodeManager.main(NodeManager.java:521)&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="解决方案-1"&gt;&lt;a href="#%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88-1" class="header-anchor"&gt;&lt;/a&gt;解决方案&#10;&lt;/h3&gt;&lt;p&gt;重新配置yarn-site.xml，确保其有下面这一段，并且使用&lt;code&gt;SSH 主机名&lt;/code&gt;能够访问该节点&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;&amp;lt;!--ResourceManager主机名--&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#9;&lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;yarn.resourcemanager.hostname&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#9;&lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;hadoop0&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="yarn运算io错误"&gt;&lt;a href="#yarn%e8%bf%90%e7%ae%97io%e9%94%99%e8%af%af" class="header-anchor"&gt;&lt;/a&gt;YARN运算IO错误&#10;&lt;/h2&gt;&lt;p&gt;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="525px" data-flex-grow="218" height="427" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/28TRr7.png" width="935"&gt;&lt;/p&gt;&#10;&lt;p&gt;该错误由于机器内存过小，却执行复杂的运算，导致内存不足，报JavaIO异常，例如在2G内存的机器上执行&lt;code&gt; hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar pi 4 5&lt;/code&gt;运算&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt; Job Finished in 34.889 seconds&#10; java.io.FileNotFoundException: File does not exist: hdfs://192.168.79.129:8020/user/hadoop/QuasiMonteCarlo_1524323663509_1454922894/out/reduce-out&#10; at org.apache.hadoop.hdfs.DistributedFileSystem$19.doCall(DistributedFileSystem.java:1219)&#10; at org.apache.hadoop.hdfs.DistributedFileSystem$19.doCall(DistributedFileSystem.java:1211)&#10; at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81)&#10; at org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:1211)&#10; at org.apache.hadoop.io.SequenceFile$Reader.&amp;lt;init&amp;gt;(SequenceFile.java:1750)&#10; at org.apache.hadoop.io.SequenceFile$Reader.&amp;lt;init&amp;gt;(SequenceFile.java:1774)&#10; at org.apache.hadoop.examples.QuasiMonteCarlo.estimatePi(QuasiMonteCarlo.java:314)&#10; at org.apache.hadoop.examples.QuasiMonteCarlo.run(QuasiMonteCarlo.java:354)&#10; at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)&#10; at org.apache.hadoop.examples.QuasiMonteCarlo.main(QuasiMonteCarlo.java:363)&#10; at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)&#10; at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)&#10; at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)&#10; at java.lang.reflect.Method.invoke(Method.java:498)&#10; at org.apache.hadoop.util.ProgramDriver$ProgramDescription.invoke(ProgramDriver.java:71)&#10; at org.apache.hadoop.util.ProgramDriver.run(ProgramDriver.java:144)&#10; at org.apache.hadoop.examples.ExampleDriver.main(ExampleDriver.java:74)&#10; at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)&#10; at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)&#10; at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)&#10; at java.lang.reflect.Method.invoke(Method.java:498)&#10; at org.apache.hadoop.util.RunJar.run(RunJar.java:221)&#10; at org.apache.hadoop.util.RunJar.main(RunJar.java:136)&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;YARN也显示工作失败&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="2028px" data-flex-grow="845" height="202" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/28TXWN.png" width="1707"&gt;&lt;/p&gt;&#10;&lt;h3 id="解决方案-2"&gt;&lt;a href="#%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88-2" class="header-anchor"&gt;&lt;/a&gt;解决方案&#10;&lt;/h3&gt;&lt;p&gt;调整虚拟内存，或者减小运算精度，例如设置精度为&lt;code&gt;hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar pi 2 3&lt;/code&gt;则一般不会有问题&lt;/p&gt;&#10;&lt;h2 id="机器时间不同步"&gt;&lt;a href="#%e6%9c%ba%e5%99%a8%e6%97%b6%e9%97%b4%e4%b8%8d%e5%90%8c%e6%ad%a5" class="header-anchor"&gt;&lt;/a&gt;机器时间不同步&#10;&lt;/h2&gt;&lt;p&gt;该问题出现在MapReduce测试时，若主从节点机器时间不一致则会报同步错误&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt; 18/04/21 23:55:20 INFO mapreduce.Job: Task Id : attempt_1524320196806_0003_m_000000_2, Status : FAILED&#10; Container launch failed for container_1524320196806_0003_01_000004 : org.apache.hadoop.yarn.exceptions.YarnException: Unauthorized request to start container.&#10; This token is expired. current time is 1524333912535 found 1524326717165&#10; Note: System times on machines may be out of sync. Check system time and time zones.&#10; at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)&#10; at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)&#10; at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)&#10; at java.lang.reflect.Constructor.newInstance(Constructor.java:423)&#10; at org.apache.hadoop.yarn.api.records.impl.pb.SerializedExceptionPBImpl.instantiateException(SerializedExceptionPBImpl.java:168)&#10; at org.apache.hadoop.yarn.api.records.impl.pb.SerializedExceptionPBImpl.deSerialize(SerializedExceptionPBImpl.java:106)&#10; at org.apache.hadoop.mapreduce.v2.app.launcher.ContainerLauncherImpl$Container.launch(ContainerLauncherImpl.java:159)&#10; at org.apache.hadoop.mapreduce.v2.app.launcher.ContainerLauncherImpl$EventProcessor.run(ContainerLauncherImpl.java:379)&#10; at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)&#10; at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)&#10; at java.lang.Thread.run(Thread.java:745)&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="解决方案-3"&gt;&lt;a href="#%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88-3" class="header-anchor"&gt;&lt;/a&gt;解决方案&#10;&lt;/h3&gt;&lt;p&gt;首先检查各节点的时间&#10;主节点&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@hadoop0 testFile&lt;span class="o"&gt;]&lt;/span&gt;$ timedatectl status&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Local time: 六 2018-04-21 23:57:21 CST&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Universal time: 六 2018-04-21 15:57:21 UTC&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; RTC time: 六 2018-04-21 15:44:44&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Time zone: Asia/Shanghai &lt;span class="o"&gt;(&lt;/span&gt;CST, +0800&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; NTP enabled: yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; NTP synchronized: no&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; RTC in &lt;span class="nb"&gt;local&lt;/span&gt; TZ: no&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; DST active: n/a&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;从节点1&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;hadoop@hadoop1 hadoop&lt;span class="o"&gt;]&lt;/span&gt;$ timedatectl status&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Local time: 日 2018-04-22 02:06:49 CST&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Universal time: 六 2018-04-21 18:06:49 UTC&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; RTC time: 六 2018-04-21 17:54:14&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Time zone: Asia/Shanghai &lt;span class="o"&gt;(&lt;/span&gt;CST, +0800&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; NTP enabled: yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NTP synchronized: no&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; RTC in &lt;span class="nb"&gt;local&lt;/span&gt; TZ: no&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; DST active: n/a&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;从节点2&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;hadoop@hadoop2 hadoop&lt;span class="o"&gt;]&lt;/span&gt;$ timedatectl status&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Local time: 日 2018-04-22 02:07:00 CST&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Universal time: 六 2018-04-21 18:07:00 UTC&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; RTC time: 日 2018-04-22 04:00:48&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Time zone: Asia/Shanghai &lt;span class="o"&gt;(&lt;/span&gt;CST, +0800&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; NTP enabled: yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NTP synchronized: no&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; RTC in &lt;span class="nb"&gt;local&lt;/span&gt; TZ: no&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; DST active: n/a&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;三个节点显然时间不一致，使用&lt;code&gt;ntpdate&lt;/code&gt;工具同步各机器时间&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@hadoop2 hadoop&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;# yum -y install ntp ntpdate&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;已加载插件：fastestmirror&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;base &lt;span class="p"&gt;|&lt;/span&gt; 3.6 kB 00:00:00&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;epel/x86_64/metalink &lt;span class="p"&gt;|&lt;/span&gt; 7.7 kB 00:00:00&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;epel &lt;span class="p"&gt;|&lt;/span&gt; 4.7 kB 00:00:00&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;extras &lt;span class="p"&gt;|&lt;/span&gt; 3.4 kB 00:00:00&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;updates &lt;span class="p"&gt;|&lt;/span&gt; 3.4 kB 00:00:00&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;(&lt;/span&gt;1/4&lt;span class="o"&gt;)&lt;/span&gt;: epel/x86_64/updateinfo &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="m"&gt;916&lt;/span&gt; kB 00:00:01&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;(&lt;/span&gt;2/4&lt;span class="o"&gt;)&lt;/span&gt;: extras/7/x86_64/primary_db &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="m"&gt;185&lt;/span&gt; kB 00:00:01&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;(&lt;/span&gt;3/4&lt;span class="o"&gt;)&lt;/span&gt;: epel/x86_64/primary_db &lt;span class="p"&gt;|&lt;/span&gt; 6.3 MB 00:00:01&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;(&lt;/span&gt;4/4&lt;span class="o"&gt;)&lt;/span&gt;: updates/7/x86_64/primary_db &lt;span class="p"&gt;|&lt;/span&gt; 6.9 MB 00:00:03&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Determining fastest mirrors&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; * base: centos.ustc.edu.cn&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; * epel: mirror01.idc.hinet.net&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; * extras: mirrors.aliyun.com&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; * updates: mirrors.aliyun.com&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;软件包 ntp-4.2.6p5-25.el7.centos.2.x86_64 已安装并且是最新版本&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;软件包 ntpdate-4.2.6p5-25.el7.centos.2.x86_64 已安装并且是最新版本&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;无须任何处理&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@hadoop2 hadoop&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;# ntpdate cn.pool.ntp.org&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;22&lt;/span&gt; Apr 12:02:55 ntpdate&lt;span class="o"&gt;[&lt;/span&gt;36396&lt;span class="o"&gt;]&lt;/span&gt;: step &lt;span class="nb"&gt;time&lt;/span&gt; server 108.59.2.24 offset 35618.521668 sec&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;将时间偏差写入机器时间&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@hadoop2 hadoop&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;# hwclock --systohc&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@hadoop2 hadoop&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;# date&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2018年 04月 22日 星期日 12:03:33 CST&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;问题解决&lt;/p&gt;&#10;</description></item><item><title>Hadoop分布式搭建测试</title><link>https://blog.fjy8018.top/archives/150/</link><pubDate>Sat, 21 Apr 2018 18:10:00 +0800</pubDate><guid>https://blog.fjy8018.top/archives/150/</guid><description>&lt;h2 id="搭建环境"&gt;&lt;a href="#%e6%90%ad%e5%bb%ba%e7%8e%af%e5%a2%83" class="header-anchor"&gt;&lt;/a&gt;搭建环境&#10;&lt;/h2&gt;&lt;p&gt;Windows VM虚拟机&lt;/p&gt;&#10;&lt;p&gt;虚拟机配置&#10;CPU:7700 单核&#10;RAM:2G&#10;SSD:20G&#10;OS:CentOS 7.4&lt;/p&gt;&#10;&lt;h2 id="环境配置"&gt;&lt;a href="#%e7%8e%af%e5%a2%83%e9%85%8d%e7%bd%ae" class="header-anchor"&gt;&lt;/a&gt;环境配置&#10;&lt;/h2&gt;&lt;h3 id="修改主机名"&gt;&lt;a href="#%e4%bf%ae%e6%94%b9%e4%b8%bb%e6%9c%ba%e5%90%8d" class="header-anchor"&gt;&lt;/a&gt;修改主机名&#10;&lt;/h3&gt;&lt;p&gt;因为三台虚拟机均为一台虚拟机克隆而成，且源主机名为localhost，先计划将三台主机分别设置为hadoop0，hadoop1，hadoop2&#10;IP、主机名、职能分别为：&#10;192.168.79.129 hadoop0 NameNode DataNode ResourceManager NodeManager&#10;192.168.79.130 hadoop1 DataNode NodeManager&#10;192.168.79.131 hadoop2 DataNode NodeManager&lt;/p&gt;&#10;&lt;p&gt;CentOS 7使用&lt;code&gt;hostnamectl set-hostname hadoop0&lt;/code&gt;设置主机名，其他几台同样操作，输入后可通过&lt;code&gt;hostnamectl status&lt;/code&gt;查看是否修改成功&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;root@hadoop0 ~&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;# hostnamectl status&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Static hostname: hadoop0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Icon name: computer-vm&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Chassis: vm&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Machine ID: 4eddbba909c84e159cfa474604412c3c&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Boot ID: df37e835fde94d039153028c9479b68e&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Virtualization: vmware&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Operating System: CentOS Linux &lt;span class="m"&gt;7&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;Core&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; CPE OS Name: cpe:/o:centos:centos:7&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Kernel: Linux 3.10.0-693.el7.x86_64&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Architecture: x86-64&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;由于hadoop0是根节点，用于资源调度，故其需要具有所有DataNode的访问地址和权限，进入&lt;code&gt;/etc/hosts&lt;/code&gt;文件，添加如下内容将主机名解析到对应的IP&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt; 192.168.79.129 hadoop0&#10; 192.168.79.130 hadoop1&#10; 192.168.79.131 hadoop2&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="1075px" data-flex-grow="448" height="143" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/28OPgg.png" width="641"&gt;&lt;/p&gt;&#10;&lt;h3 id="ssh免密码登录"&gt;&lt;a href="#ssh%e5%85%8d%e5%af%86%e7%a0%81%e7%99%bb%e5%bd%95" class="header-anchor"&gt;&lt;/a&gt;SSH免密码登录&#10;&lt;/h3&gt;&lt;p&gt;进入当前用户的根目录&lt;code&gt;/home/hadoop/.ssh/&lt;/code&gt;，在该目录下执行&lt;code&gt;ssh-keygen -t rsa&lt;/code&gt;生成主机公钥，过程中弹出的除了&lt;code&gt; Overwrite (y/n)? y&lt;/code&gt;选择&lt;code&gt;y&lt;/code&gt;确认覆盖之外，其余全为空值，则可生成免密码登录的公钥&#10;&lt;strong&gt;【注意】Ubuntu系统操作略有特殊，建议使用CentOS系统进行操作&lt;/strong&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;hadoop@hadoop0 root&lt;span class="o"&gt;]&lt;/span&gt;$ &lt;span class="nb"&gt;cd&lt;/span&gt; /home/hadoop/.ssh/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;hadoop@hadoop0 .ssh&lt;span class="o"&gt;]&lt;/span&gt;$ ssh-keygen -t rsa&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Generating public/private rsa key pair.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Enter file in which to save the key &lt;span class="o"&gt;(&lt;/span&gt;/home/hadoop/.ssh/id_rsa&lt;span class="o"&gt;)&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/home/hadoop/.ssh/id_rsa already exists.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Overwrite &lt;span class="o"&gt;(&lt;/span&gt;y/n&lt;span class="o"&gt;)&lt;/span&gt;? y&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Enter passphrase &lt;span class="o"&gt;(&lt;/span&gt;empty &lt;span class="k"&gt;for&lt;/span&gt; no passphrase&lt;span class="o"&gt;)&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Enter same passphrase again:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Your identification has been saved in /home/hadoop/.ssh/id_rsa.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Your public key has been saved in /home/hadoop/.ssh/id_rsa.pub.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;The key fingerprint is:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SHA256:RjyGCGedx9xzxXG97KGgjXMIZ/pg7Q+tLU1nJoxIhm8 hadoop@hadoop0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;The key&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;s randomart image is:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+---&lt;span class="o"&gt;[&lt;/span&gt;RSA 2048&lt;span class="o"&gt;]&lt;/span&gt;----+&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; . o. + . oo.o&lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; + .oo+ o . ...&lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; . o.&lt;span class="o"&gt;=&lt;/span&gt; o . .&lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; . * + . + &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; + S B . o .&lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; E B.* &lt;span class="o"&gt;=&lt;/span&gt; . &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; o +.&lt;span class="o"&gt;=&lt;/span&gt;.&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; ++. &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; .oo &lt;span class="p"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+----&lt;span class="o"&gt;[&lt;/span&gt;SHA256&lt;span class="o"&gt;]&lt;/span&gt;-----+&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;使用&lt;code&gt;ssh-copy-id&lt;/code&gt;将本地主机的公钥复制到远程主机的authorized_keys文件上，此时先对本地主机&lt;code&gt;hadoop0&lt;/code&gt;授权&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;hadoop@hadoop0 .ssh&lt;span class="o"&gt;]&lt;/span&gt;$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/usr/bin/ssh-copy-id: INFO: Source of key&lt;span class="o"&gt;(&lt;/span&gt;s&lt;span class="o"&gt;)&lt;/span&gt; to be installed: &lt;span class="s2"&gt;&amp;#34;/home/hadoop/.ssh/id_rsa.pub&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;The authenticity of host &lt;span class="s1"&gt;&amp;#39;hadoop0 (fe80::e99d:ad75:28e9:9276%ens33)&amp;#39;&lt;/span&gt; can&lt;span class="s1"&gt;&amp;#39;t be established.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;ECDSA key fingerprint is SHA256:GEEH9kBVcDuaYpJZLNsaWZA3O47+HdqIbd91fGAWcew.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;ECDSA key fingerprint is MD5:cd:df:9e:8c:92:3a:9f:ae:b0:10:9b:b6:25:9c:4d:c6.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;Are you sure you want to continue connecting (yes/no)? yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;hadoop@hadoop0&amp;#39;&lt;/span&gt;s password:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Number of key&lt;span class="o"&gt;(&lt;/span&gt;s&lt;span class="o"&gt;)&lt;/span&gt; added: &lt;span class="m"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Now try logging into the machine, with: &lt;span class="s2"&gt;&amp;#34;ssh &amp;#39;hadoop0&amp;#39;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;and check to make sure that only the key&lt;span class="o"&gt;(&lt;/span&gt;s&lt;span class="o"&gt;)&lt;/span&gt; you wanted were added.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;测试SSH免密码登录成功&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@hadoop0 /&lt;span class="o"&gt;]&lt;/span&gt;$ ssh hadoop0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Last login: Sat Apr &lt;span class="m"&gt;21&lt;/span&gt; 17:18:37 &lt;span class="m"&gt;2018&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@hadoop0 ~&lt;span class="o"&gt;]&lt;/span&gt;$ &lt;span class="nb"&gt;exit&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 登出&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Connection to hadoop0 closed.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;对另外两台主机访问授权&#10;hadoop1&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@hadoop0 root&lt;span class="o"&gt;]&lt;/span&gt;$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; /usr/bin/ssh-copy-id: INFO: Source of key&lt;span class="o"&gt;(&lt;/span&gt;s&lt;span class="o"&gt;)&lt;/span&gt; to be installed: &lt;span class="s2"&gt;&amp;#34;/home/hadoop/.ssh/id_rsa.pub&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; The authenticity of host &lt;span class="s1"&gt;&amp;#39;hadoop1 (192.168.79.130)&amp;#39;&lt;/span&gt; can&lt;span class="s1"&gt;&amp;#39;t be established.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; ECDSA key fingerprint is SHA256:GEEH9kBVcDuaYpJZLNsaWZA3O47+HdqIbd91fGAWcew.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; ECDSA key fingerprint is MD5:cd:df:9e:8c:92:3a:9f:ae:b0:10:9b:b6:25:9c:4d:c6.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; Are you sure you want to continue connecting (yes/no)? yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; hadoop@hadoop1&amp;#39;&lt;/span&gt;s password:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Number of key&lt;span class="o"&gt;(&lt;/span&gt;s&lt;span class="o"&gt;)&lt;/span&gt; added: &lt;span class="m"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Now try logging into the machine, with: &lt;span class="s2"&gt;&amp;#34;ssh &amp;#39;hadoop1&amp;#39;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; and check to make sure that only the key&lt;span class="o"&gt;(&lt;/span&gt;s&lt;span class="o"&gt;)&lt;/span&gt; you wanted were added.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;hadoop2&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@hadoop0 root&lt;span class="o"&gt;]&lt;/span&gt;$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop2&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; /usr/bin/ssh-copy-id: INFO: Source of key&lt;span class="o"&gt;(&lt;/span&gt;s&lt;span class="o"&gt;)&lt;/span&gt; to be installed: &lt;span class="s2"&gt;&amp;#34;/home/hadoop/.ssh/id_rsa.pub&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; The authenticity of host &lt;span class="s1"&gt;&amp;#39;hadoop2 (192.168.79.131)&amp;#39;&lt;/span&gt; can&lt;span class="s1"&gt;&amp;#39;t be established.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; ECDSA key fingerprint is SHA256:GEEH9kBVcDuaYpJZLNsaWZA3O47+HdqIbd91fGAWcew.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; ECDSA key fingerprint is MD5:cd:df:9e:8c:92:3a:9f:ae:b0:10:9b:b6:25:9c:4d:c6.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; Are you sure you want to continue connecting (yes/no)? yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; hadoop@hadoop2&amp;#39;&lt;/span&gt;s password:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Number of key&lt;span class="o"&gt;(&lt;/span&gt;s&lt;span class="o"&gt;)&lt;/span&gt; added: &lt;span class="m"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Now try logging into the machine, with: &lt;span class="s2"&gt;&amp;#34;ssh &amp;#39;hadoop2&amp;#39;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; and check to make sure that only the key&lt;span class="o"&gt;(&lt;/span&gt;s&lt;span class="o"&gt;)&lt;/span&gt; you wanted were added.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;对另外两台主机做类似操作，即仅对本地主机授权，无需对hadoop0主机授权，操作后可查看&lt;code&gt;authorized_keys&lt;/code&gt;文件内容，当前主机名即可&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="1059px" data-flex-grow="441" height="212" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/28ORGX.png" width="936"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="1040px" data-flex-grow="433" height="216" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/28OxpG.png" width="936"&gt;&lt;/p&gt;&#10;&lt;h2 id="环境变量"&gt;&lt;a href="#%e7%8e%af%e5%a2%83%e5%8f%98%e9%87%8f" class="header-anchor"&gt;&lt;/a&gt;环境变量&#10;&lt;/h2&gt;&lt;p&gt;三台主机均由之前的单节点主机克隆而来，故宝塔、java、hadoop环境是自带的&#10;Java8&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@hadoop0 .ssh&lt;span class="o"&gt;]&lt;/span&gt;$ java -version&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; java version &lt;span class="s2"&gt;&amp;#34;1.8.0_121&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Java&lt;span class="o"&gt;(&lt;/span&gt;TM&lt;span class="o"&gt;)&lt;/span&gt; SE Runtime Environment &lt;span class="o"&gt;(&lt;/span&gt;build 1.8.0_121-b13&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Java HotSpot&lt;span class="o"&gt;(&lt;/span&gt;TM&lt;span class="o"&gt;)&lt;/span&gt; 64-Bit Server VM &lt;span class="o"&gt;(&lt;/span&gt;build 25.121-b13, mixed mode&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@hadoop0 .ssh&lt;span class="o"&gt;]&lt;/span&gt;$ javac -version&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; javac 1.8.0_121&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;hadoop&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@hadoop0 .ssh&lt;span class="o"&gt;]&lt;/span&gt;$ &lt;span class="nb"&gt;cd&lt;/span&gt; /www/hadoop&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@hadoop0 hadoop&lt;span class="o"&gt;]&lt;/span&gt;$&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@hadoop0 hadoop&lt;span class="o"&gt;]&lt;/span&gt;$ ls&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; hadoop-2.6.0-cdh5.7.0 hadoop-2.6.0-cdh5.7.0.tar.gz testFile tmp&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@hadoop0 hadoop&lt;span class="o"&gt;]&lt;/span&gt;$ &lt;span class="nb"&gt;source&lt;/span&gt; ~/.bash_profile&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;$HADOOP_HOME&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@hadoop0 hadoop&lt;span class="o"&gt;]&lt;/span&gt;$ &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$HADOOP_HOME&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; /www/hadoop/hadoop-2.6.0-cdh5.7.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="hadoop配置"&gt;&lt;a href="#hadoop%e9%85%8d%e7%bd%ae" class="header-anchor"&gt;&lt;/a&gt;hadoop配置&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;若之前配置过hadoop，建议将原目录删除后重新解压，主节点和从节点的目录都要删除干净，否则会导致大量问题&lt;/strong&gt;&#10;配置主节点core-site.xml&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;fs.defaultFS&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;hdfs://192.168.79.129:8020&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;配置HDFS文件存放目录和节点数&lt;code&gt;hdfs-site.xml&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;dfs.namenode.name.dir&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;/www/hadoop/app/tmp/dfs/name&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;dfs.datanode.data.dir&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;/www/hadoop/app/tmp/dfs/data&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;配置YARN的yarn.xml，删除单节点的配置，添加如下字段&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;&amp;lt;!-- Site specific YARN configuration properties --&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;yarn.nodemanager.aux-services&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;mapreduce_shuffle&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#9;&lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#9;&#9;&lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;yarn.log-aggregation-enable&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#9;&#9;&lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;true&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#9;&lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;&amp;lt;!--ResourceManager主机名--&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#9;&#9;&lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;yarn.resourcemanager.hostname&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#9;&#9;&lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;hadoop0&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#9;&lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;配置从节点slave，默认slave为localhost&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@hadoop0 hadoop&lt;span class="o"&gt;]&lt;/span&gt;$ cat slaves&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; localhost&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;加入host配置&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@hadoop0 hadoop&lt;span class="o"&gt;]&lt;/span&gt;$ cat slaves&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; hadoop0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; hadoop1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; hadoop2&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;额外配置，启用jobhistory&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;mapreduce.framework.name&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;yarn&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#9;&#9;&lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;mapreduce.jobhistory.address&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#9;&#9;&lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;192.168.79.129:10020&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#9;&#9;&lt;span class="nt"&gt;&amp;lt;description&amp;gt;&lt;/span&gt;MapReduce JobHistory Server IPC host:port&lt;span class="nt"&gt;&amp;lt;/description&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#9;&lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#9;&lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#9;&#9;&lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;mapreduce.jobhistory.webapp.address&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#9;&#9;&lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;192.168.79.129:19888&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#9;&#9;&lt;span class="nt"&gt;&amp;lt;description&amp;gt;&lt;/span&gt;MapReduce JobHistory Server Web UI host:port&lt;span class="nt"&gt;&amp;lt;/description&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#9;&lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#9;&lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#9;&#9;&lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;mapreduce.jobhistory.done-dir&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#9;&#9;&lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;/history/done&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#9;&lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#9;&lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#9;&#9;&lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;mapreduce.jobhistory.intermediate-done-dir&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#9;&#9;&lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;/history/done_intermediate&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#9;&lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;【注意】配置好后将单节点时的&lt;code&gt;/www/hadoop/hadoop-2.6.0-cdh5.7.0/logs&lt;/code&gt;文件夹删除或者直接重新解压&lt;code&gt;hadoop&lt;/code&gt;的压缩包防止出现文件夹权限导致的错误&lt;/strong&gt;&lt;/p&gt;&#10;&lt;h3 id="资源分发"&gt;&lt;a href="#%e8%b5%84%e6%ba%90%e5%88%86%e5%8f%91" class="header-anchor"&gt;&lt;/a&gt;资源分发&#10;&lt;/h3&gt;&lt;p&gt;将主节点的所有配置分发到从节点，避免重复配置。在主节点执行如下命令即可&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; scp -r /www/hadoop hadoop@hadoop1:/www&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; scp -r /www/hadoop hadoop@hadoop2:/www&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt="hadoop分布式" class="gallery-image" data-flex-basis="6363px" data-flex-grow="2651" height="35" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/28XQdL.png" width="928"&gt;&lt;/p&gt;&#10;&lt;p&gt;分发完成&#10;&lt;img alt="hadoop分布式" class="gallery-image" data-flex-basis="468px" data-flex-grow="195" height="465" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/28XXWg.png" width="908"&gt;&lt;/p&gt;&#10;&lt;p&gt;去根节点查看文件是否已经传到，分别执行&lt;code&gt;source ~/.bash_profile&lt;/code&gt;以启用&lt;code&gt;hadoop&lt;/code&gt;命令&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="hadoop分布式" class="gallery-image" data-flex-basis="437px" data-flex-grow="182" height="389" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/28XSI8.png" width="709"&gt;&lt;/p&gt;&#10;&lt;p&gt;注意分发前执行一次&lt;code&gt;hadoop&lt;/code&gt;命令是报&lt;code&gt;未找到命令&lt;/code&gt;，说明从节点的hadoop旧根目录是删除干净的，分发完成后再次执行命令就有效了&#10;&lt;img alt="hadoop分布式" class="gallery-image" data-flex-basis="481px" data-flex-grow="200" height="365" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/28XpsR.png" width="732"&gt;&lt;/p&gt;&#10;&lt;h2 id="namenode格式化"&gt;&lt;a href="#namenode%e6%a0%bc%e5%bc%8f%e5%8c%96" class="header-anchor"&gt;&lt;/a&gt;NameNode格式化&#10;&lt;/h2&gt;&lt;p&gt;格式化只对主节点执行即可&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; hdfs namenode -format&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;格式化成功&#10;&lt;img alt="hadoop分布式" class="gallery-image" data-flex-basis="637px" data-flex-grow="265" height="260" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/28XToc.png" width="691"&gt;&lt;/p&gt;&#10;&lt;h2 id="hadoop分布式启动"&gt;&lt;a href="#hadoop%e5%88%86%e5%b8%83%e5%bc%8f%e5%90%af%e5%8a%a8" class="header-anchor"&gt;&lt;/a&gt;hadoop分布式启动&#10;&lt;/h2&gt;&lt;p&gt;主节点启动，在&lt;code&gt;/sbin&lt;/code&gt;目录下，执行&lt;code&gt;./start-all.sh&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@hadoop0 bin&lt;span class="o"&gt;]&lt;/span&gt;$ &lt;span class="nb"&gt;cd&lt;/span&gt; ../sbin&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@hadoop0 sbin&lt;span class="o"&gt;]&lt;/span&gt;$ ./start-all.sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 18/04/21 22:16:18 WARN util.NativeCodeLoader: Unable to load native-hadoop library &lt;span class="k"&gt;for&lt;/span&gt; your platform... using builtin-java classes where applicable&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Starting namenodes on &lt;span class="o"&gt;[&lt;/span&gt;hadoop0&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;从节点的&lt;code&gt;datanode&lt;/code&gt;和&lt;code&gt;namenode&lt;/code&gt;逐一启动&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; hadoop0: starting namenode, logging to /www/hadoop/hadoop-2.6.0-cdh5.7.0/logs/hadoop-hadoop-namenode-hadoop0.out&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; hadoop1: starting datanode, logging to /www/hadoop/hadoop-2.6.0-cdh5.7.0/logs/hadoop-hadoop-datanode-hadoop1.out&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; hadoop0: starting datanode, logging to /www/hadoop/hadoop-2.6.0-cdh5.7.0/logs/hadoop-hadoop-datanode-hadoop0.out&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; hadoop2: starting datanode, logging to /www/hadoop/hadoop-2.6.0-cdh5.7.0/logs/hadoop-hadoop-datanode-hadoop2.out&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Starting secondary namenodes &lt;span class="o"&gt;[&lt;/span&gt;0.0.0.0&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;主节点&lt;code&gt;secondarynamenode&lt;/code&gt;启动&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 0.0.0.0: starting secondarynamenode, logging to /www/hadoop/hadoop-2.6.0-cdh5.7.0/logs/hadoop-hadoop-secondarynamenode-hadoop0.out&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 18/04/21 22:16:34 WARN util.NativeCodeLoader: Unable to load native-hadoop library &lt;span class="k"&gt;for&lt;/span&gt; your platform... using builtin-java classes where applicable&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;启动&lt;code&gt;yarn&lt;/code&gt;和&lt;code&gt;resourcemanager&lt;/code&gt;、&lt;code&gt;nodemanager&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; starting yarn daemons&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; starting resourcemanager, logging to /www/hadoop/hadoop-2.6.0-cdh5.7.0/logs/yarn-hadoop-resourcemanager-hadoop0.out&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; hadoop1: starting nodemanager, logging to /www/hadoop/hadoop-2.6.0-cdh5.7.0/logs/yarn-hadoop-nodemanager-hadoop1.out&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; hadoop2: starting nodemanager, logging to /www/hadoop/hadoop-2.6.0-cdh5.7.0/logs/yarn-hadoop-nodemanager-hadoop2.out&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; hadoop0: starting nodemanager, logging to /www/hadoop/hadoop-2.6.0-cdh5.7.0/logs/yarn-hadoop-nodemanager-hadoop0.out&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt="hadoop分布式" class="gallery-image" data-flex-basis="514px" data-flex-grow="214" height="435" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/28XRry.png" width="933"&gt;&lt;/p&gt;&#10;&lt;h2 id="hadoop分布式启动验证"&gt;&lt;a href="#hadoop%e5%88%86%e5%b8%83%e5%bc%8f%e5%90%af%e5%8a%a8%e9%aa%8c%e8%af%81" class="header-anchor"&gt;&lt;/a&gt;hadoop分布式启动验证&#10;&lt;/h2&gt;&lt;h3 id="命令行方式"&gt;&lt;a href="#%e5%91%bd%e4%bb%a4%e8%a1%8c%e6%96%b9%e5%bc%8f" class="header-anchor"&gt;&lt;/a&gt;命令行方式&#10;&lt;/h3&gt;&lt;p&gt;使用jps查看进程，以下进程少一个都不行，若缺少，查看另一篇文章寻找解决办法&lt;a class="link" href="https://blog.fjy8018.top/archives/151/" &gt;hadoop分布式搭建的一些坑&lt;/a&gt;&#10;&lt;img alt="hadoop分布式" class="gallery-image" data-flex-basis="392px" data-flex-grow="163" height="137" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/28XjNw.png" width="224"&gt;&lt;/p&gt;&#10;&lt;p&gt;[[hadoop分布式搭建的一些坑]]&lt;/p&gt;&#10;&lt;p&gt;启动主节点后从节点的HDFS会自动启动，进入从节点，使用jps查看，有两个进程即成功&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@hadoop2 hadoop&lt;span class="o"&gt;]&lt;/span&gt;$ jps&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;29876&lt;/span&gt; Jps&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;29575&lt;/span&gt; DataNode&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;29692&lt;/span&gt; NodeManager&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="webui方式"&gt;&lt;a href="#webui%e6%96%b9%e5%bc%8f" class="header-anchor"&gt;&lt;/a&gt;webUI方式&#10;&lt;/h3&gt;&lt;p&gt;使用webUI确认所有进程成功启动，查看HDFS节点&#10;&lt;img alt="hadoop分布式" class="gallery-image" data-flex-basis="373px" data-flex-grow="155" height="710" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/28XbCW.png" width="1105"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="hadoop分布式" class="gallery-image" data-flex-basis="376px" data-flex-grow="156" height="705" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/28XvgD.png" width="1105"&gt;&lt;/p&gt;&#10;&lt;p&gt;查看YARN&#10;&lt;img alt="hadoop分布式" class="gallery-image" data-flex-basis="1132px" data-flex-grow="471" height="407" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/28XW6d.png" width="1920"&gt;&lt;/p&gt;&#10;&lt;p&gt;已经有三个从节点注册到YARN&#10;&lt;img alt="hadoop分布式" class="gallery-image" data-flex-basis="1037px" data-flex-grow="432" height="444" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/28XN0i.png" width="1920"&gt;&lt;/p&gt;&#10;&lt;h2 id="分布式集群测试"&gt;&lt;a href="#%e5%88%86%e5%b8%83%e5%bc%8f%e9%9b%86%e7%be%a4%e6%b5%8b%e8%af%95" class="header-anchor"&gt;&lt;/a&gt;分布式集群测试&#10;&lt;/h2&gt;&lt;h3 id="分布式文件测试"&gt;&lt;a href="#%e5%88%86%e5%b8%83%e5%bc%8f%e6%96%87%e4%bb%b6%e6%b5%8b%e8%af%95" class="header-anchor"&gt;&lt;/a&gt;分布式文件测试&#10;&lt;/h3&gt;&lt;p&gt;上传测试文件再查看节点情况&#10;初始节点为空&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@hadoop0 hadoop-2.6.0-cdh5.7.0&lt;span class="o"&gt;]&lt;/span&gt;$ ls&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; bin cloudera examples include libexec logs README.txt share&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; bin-mapreduce1 etc examples-mapreduce1 lib LICENSE.txt NOTICE.txt sbin src&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@hadoop0 hadoop-2.6.0-cdh5.7.0&lt;span class="o"&gt;]&lt;/span&gt;$ hadoop fs -ls /&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 18/04/21 22:33:27 WARN util.NativeCodeLoader: Unable to load native-hadoop library &lt;span class="k"&gt;for&lt;/span&gt; your platform... using builtin-java classes where applicable&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;新建数据目录&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@hadoop0 hadoop-2.6.0-cdh5.7.0&lt;span class="o"&gt;]&lt;/span&gt;$ hadoop fs -mkdir /data&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 18/04/21 22:33:41 WARN util.NativeCodeLoader: Unable to load native-hadoop library &lt;span class="k"&gt;for&lt;/span&gt; your platform... using builtin-java classes where applicable&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@hadoop0 hadoop-2.6.0-cdh5.7.0&lt;span class="o"&gt;]&lt;/span&gt;$ hadoop fs -ls /&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 18/04/21 22:33:45 WARN util.NativeCodeLoader: Unable to load native-hadoop library &lt;span class="k"&gt;for&lt;/span&gt; your platform... using builtin-java classes where applicable&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Found &lt;span class="m"&gt;1&lt;/span&gt; items&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; drwxr-xr-x - hadoop supergroup &lt;span class="m"&gt;0&lt;/span&gt; 2018-04-21 22:33 /data&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;上传小文件&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@hadoop0 hadoop-2.6.0-cdh5.7.0&lt;span class="o"&gt;]&lt;/span&gt;$ hadoop fs -put README.txt /data&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 18/04/21 22:34:13 WARN util.NativeCodeLoader: Unable to load native-hadoop library &lt;span class="k"&gt;for&lt;/span&gt; your platform... using builtin-java classes where applicable&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@hadoop0 hadoop-2.6.0-cdh5.7.0&lt;span class="o"&gt;]&lt;/span&gt;$ hadoop fs -ls /data&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 18/04/21 22:34:26 WARN util.NativeCodeLoader: Unable to load native-hadoop library &lt;span class="k"&gt;for&lt;/span&gt; your platform... using builtin-java classes where applicable&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Found &lt;span class="m"&gt;1&lt;/span&gt; items&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -rw-r--r-- &lt;span class="m"&gt;3&lt;/span&gt; hadoop supergroup &lt;span class="m"&gt;1366&lt;/span&gt; 2018-04-21 22:34 /data/README.txt&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;上传大文件&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@hadoop0 hadoop&lt;span class="o"&gt;]&lt;/span&gt;$ ll&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 总用量 &lt;span class="m"&gt;304284&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; drwxrwxr-x &lt;span class="m"&gt;3&lt;/span&gt; hadoop hadoop &lt;span class="m"&gt;17&lt;/span&gt; 4月 &lt;span class="m"&gt;21&lt;/span&gt; 22:16 app&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; drwxrwxrwx &lt;span class="m"&gt;15&lt;/span&gt; www www &lt;span class="m"&gt;253&lt;/span&gt; 4月 &lt;span class="m"&gt;21&lt;/span&gt; 22:08 hadoop-2.6.0-cdh5.7.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -rwxrwxrwx &lt;span class="m"&gt;1&lt;/span&gt; www www &lt;span class="m"&gt;311585484&lt;/span&gt; 3月 &lt;span class="m"&gt;31&lt;/span&gt; 23:06 hadoop-2.6.0-cdh5.7.0.tar.gz&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; drwxr-xr-x &lt;span class="m"&gt;2&lt;/span&gt; www www &lt;span class="m"&gt;301&lt;/span&gt; 4月 &lt;span class="m"&gt;11&lt;/span&gt; 06:31 testFile&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@hadoop0 hadoop&lt;span class="o"&gt;]&lt;/span&gt;$ hadoop fs -put hadoop-2.6.0-cdh5.7.0.tar.gz /data&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 18/04/21 22:35:59 WARN util.NativeCodeLoader: Unable to load native-hadoop library &lt;span class="k"&gt;for&lt;/span&gt; your platform... using builtin-java classes where applicable&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@hadoop0 hadoop&lt;span class="o"&gt;]&lt;/span&gt;$ hadoop fs -ls /data&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 18/04/21 22:36:19 WARN util.NativeCodeLoader: Unable to load native-hadoop library &lt;span class="k"&gt;for&lt;/span&gt; your platform... using builtin-java classes where applicable&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Found &lt;span class="m"&gt;2&lt;/span&gt; items&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -rw-r--r-- &lt;span class="m"&gt;3&lt;/span&gt; hadoop supergroup &lt;span class="m"&gt;1366&lt;/span&gt; 2018-04-21 22:34 /data/README.txt&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -rw-r--r-- &lt;span class="m"&gt;3&lt;/span&gt; hadoop supergroup &lt;span class="m"&gt;311585484&lt;/span&gt; 2018-04-21 22:36 /data/hadoop-2.6.0-cdh5.7.0.tar.gz&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;通过webUI查看文件情况&#10;&lt;img alt="hadoop分布式" class="gallery-image" data-flex-basis="476px" data-flex-grow="198" height="628" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/28XqOa.png" width="1246"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="hadoop分布式" class="gallery-image" data-flex-basis="466px" data-flex-grow="194" height="627" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/28X3Hv.png" width="1220"&gt;&lt;/p&gt;&#10;&lt;h3 id="分布式mapreduce测试"&gt;&lt;a href="#%e5%88%86%e5%b8%83%e5%bc%8fmapreduce%e6%b5%8b%e8%af%95" class="header-anchor"&gt;&lt;/a&gt;分布式MapReduce测试&#10;&lt;/h3&gt;&lt;p&gt;测试MapReduce，进入&lt;code&gt;/www/hadoop/hadoop-2.6.0-cdh5.7.0/share/hadoop/mapreduce&lt;/code&gt;目录，执行pi运算&lt;code&gt;hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar pi 2 3&lt;/code&gt;&#10;&lt;strong&gt;【注意】由于此处是虚拟机，不建议将后面的精度设置过大，否则会报IO错误&lt;/strong&gt;&#10;进入YARN的web界面查看&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="1996px" data-flex-grow="832" height="206" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/28TBxe.png" width="1714"&gt;&lt;/p&gt;&#10;&lt;p&gt;运行成功&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="733px" data-flex-grow="305" height="628" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/28TPks.png" width="1920"&gt;&lt;/p&gt;&#10;&lt;h3 id="分布式日志离线处理测试"&gt;&lt;a href="#%e5%88%86%e5%b8%83%e5%bc%8f%e6%97%a5%e5%bf%97%e7%a6%bb%e7%ba%bf%e5%a4%84%e7%90%86%e6%b5%8b%e8%af%95" class="header-anchor"&gt;&lt;/a&gt;分布式日志离线处理测试&#10;&lt;/h3&gt;&lt;p&gt;上传日志数据&#10;[hadoop@hadoop0 testFile]$ hadoop fs -put access.log /data&#10;18/04/21 23:42:13 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform&amp;hellip; using builtin-java classes where applicable&#10;执行&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; hadoop jar hadoopstudy-0.6-jar-with-dependencies.jar com.fjy.hadoop.hadoop.project.LogApp /data/access.log /logaccess/out&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Web查看工作详情&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="2461px" data-flex-grow="1025" height="167" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/28oY0r.png" width="1713"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="783px" data-flex-grow="326" height="525" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/28odoJ.png" width="1714"&gt;&lt;/p&gt;&#10;&lt;p&gt;查看结果&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="480px" data-flex-grow="200" height="465" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2AyyC0.png" width="931"&gt;&lt;/p&gt;&#10;&lt;h2 id="题外话"&gt;&lt;a href="#%e9%a2%98%e5%a4%96%e8%af%9d" class="header-anchor"&gt;&lt;/a&gt;题外话&#10;&lt;/h2&gt;&lt;p&gt;其实同时运行三台虚拟机是很吃配置的，特别是内存，对于hadoop来说内存太小很多都会报异常，因此本次的测试机器配置还可以的，三台虚拟机均运行在480G SATA3的固态上&#10;CPU:7700 4core 8thread&#10;RAM:16G DDR4 Dual Channal&#10;SSD:128+480 nvme+sata3&#10;HDD:9T sata3&#10;Eth:1000M I219V&#10;但在实际运行中依然顶着内存瓶颈，多次使用了系统盘的交换分区&#10;&lt;img alt="hadoop分布式" class="gallery-image" data-flex-basis="224px" data-flex-grow="93" height="711" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/28TxS6.png" width="664"&gt;&lt;/p&gt;&#10;</description></item><item><title>MapReduce对网站日志进行分析</title><link>https://blog.fjy8018.top/archives/149/</link><pubDate>Fri, 20 Apr 2018 22:58:00 +0800</pubDate><guid>https://blog.fjy8018.top/archives/149/</guid><description>&lt;h2 id="代码"&gt;&lt;a href="#%e4%bb%a3%e7%a0%81" class="header-anchor"&gt;&lt;/a&gt;代码&#10;&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://github.com/FJiayang/hadoopstudy" target="_blank" rel="noopener"&#10; &gt;GitHub链接&lt;/a&gt;&#10;&lt;a class="link" href="https://github.com/LeeKemp/UserAgentParser" target="_blank" rel="noopener"&#10; &gt;开源工具类UserAgentParser地址&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="日志来源"&gt;&lt;a href="#%e6%97%a5%e5%bf%97%e6%9d%a5%e6%ba%90" class="header-anchor"&gt;&lt;/a&gt;日志来源&#10;&lt;/h2&gt;&lt;p&gt;根据之前的作业提交系统项目的后台获取，为了本地测试，故先从数据库中备份下来并做了适当的处理，仅保留UserAgent的相关信息&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="524px" data-flex-grow="218" height="582" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/25OjDr.png" width="1273"&gt;&lt;/p&gt;&#10;&lt;h2 id="本地文件测试"&gt;&lt;a href="#%e6%9c%ac%e5%9c%b0%e6%96%87%e4%bb%b6%e6%b5%8b%e8%af%95" class="header-anchor"&gt;&lt;/a&gt;本地文件测试&#10;&lt;/h2&gt;&lt;p&gt;使用开源工具类解析UserAgent中的信息&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;@Test&#10; public void testReadFile() throws Exception {&#10; String path = &amp;quot;F:\\JAVA Workspace\\hadoopstudy\\access.log&amp;quot;;&#10; BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(new File(path))));&#10;&#10; String line = &amp;quot;&amp;quot;;&#10; int count = 0;&#10;&#10; //模拟MapReduce存储&#10; Map&amp;lt;String, Integer&amp;gt; browerMap = new HashMap&amp;lt;String, Integer&amp;gt;();&#10;&#10; UserAgentParser userAgentParser = new UserAgentParser();&#10;&#10; while (line != null) {&#10; line = reader.readLine();&#10; count++;&#10; if (StringUtils.isNotBlank(line)) {&#10; String source = line;&#10; UserAgent agent = userAgentParser.parse(source);&#10; //测试&#10; String browser = agent.getBrowser();&#10; String engine = agent.getEngine();&#10; String engineVersion = agent.getEngineVersion();&#10; String os = agent.getOs();&#10; String platform = agent.getPlatform();&#10; boolean mobile = agent.isMobile();&#10; Integer browserValue = browerMap.get(browser);&#10; &#10; if (browserValue != null) {&#10; browerMap.put(browser, browerMap.get(browser) + 1);&#10; } else {&#10; browerMap.put(browser, 1);&#10; }&#10;&#10; //输出解析的信息&#10; System.out.println(browser + &amp;quot;,&amp;quot; + engine + &amp;quot;,&amp;quot; + engineVersion + &amp;quot;,&amp;quot; + os + &amp;quot;,&amp;quot; + platform + &amp;quot;,&amp;quot; + mobile);&#10; }&#10;&#10; }&#10; System.out.println(&amp;quot;总记录数：&amp;quot; + count);&#10; System.out.println(&amp;quot;====================================&amp;quot;);&#10; for (Map.Entry&amp;lt;String,Integer&amp;gt;entry :browerMap.entrySet()){&#10; System.out.println(entry.getKey()+&amp;quot;:&amp;quot;+entry.getValue());&#10; }&#10; }&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;执行单元测试&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="416px" data-flex-grow="173" height="548" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/25ObQF.png" width="952"&gt;&lt;/p&gt;&#10;&lt;h2 id="使用mapreduce统计"&gt;&lt;a href="#%e4%bd%bf%e7%94%a8mapreduce%e7%bb%9f%e8%ae%a1" class="header-anchor"&gt;&lt;/a&gt;使用MapReduce统计&#10;&lt;/h2&gt;&lt;p&gt;代码以WordCount为原型，结合本地测试的代码编写&#10;&amp;hellip;&#10;boolean mobile = agent.isMobile();&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt; if (mobile){&#10; mobileuser = &amp;quot;手机用户&amp;quot;;&#10; }else {&#10; mobileuser = &amp;quot;非手机用户&amp;quot;;&#10; }&#10;&#10; //通过上下文把map的处理结果输出&#10; context.write(new Text(browser), one);&#10;...&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;h3 id="打包运行"&gt;&lt;a href="#%e6%89%93%e5%8c%85%e8%bf%90%e8%a1%8c" class="header-anchor"&gt;&lt;/a&gt;打包运行&#10;&lt;/h3&gt;&lt;p&gt;将工程用&lt;code&gt;mvn assembly:assembly&lt;/code&gt;命令把插件一起打包，上传至虚拟机，同时将log上传至HDFS的根目录&#10;[hadoop@localhost testFile]$ hadoop fs -put access.log /&#10;18/04/11 06:12:14 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform&amp;hellip; using builtin-java classes where applicable&#10;[hadoop@localhost testFile]$ hadoop fs -ls /&#10;18/04/11 06:12:21 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform&amp;hellip; using builtin-java classes where applicable&#10;Found 9 items&#10;-rw-r&amp;ndash;r&amp;ndash; 1 hadoop supergroup 73 2018-04-11 00:30 /PartitionerTest.txt&#10;-rw-r&amp;ndash;r&amp;ndash; 1 hadoop supergroup 26888 2018-04-11 06:12 /access.log&#10;drwxr-xr-x - hadoop supergroup 0 2018-04-08 10:56 /hdfsapi&#10;-rw-r&amp;ndash;r&amp;ndash; 1 hadoop supergroup 60 2018-04-10 23:03 /hello.txt&#10;drwxrwx&amp;mdash; - hadoop supergroup 0 2018-04-11 01:28 /history&#10;drwxr-xr-x - hadoop supergroup 0 2018-04-11 00:35 /output&#10;drwxr-xr-x - hadoop supergroup 0 2018-04-08 10:35 /test&#10;drwx&amp;mdash;&amp;mdash; - hadoop supergroup 0 2018-04-11 01:36 /tmp&#10;drwxr-xr-x - hadoop supergroup 0 2018-04-09 20:11 /user&#10;运行&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="1354px" data-flex-grow="564" height="293" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/25OQyM.png" width="1654"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="2360px" data-flex-grow="983" height="174" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/25Oamt.png" width="1711"&gt;&lt;/p&gt;&#10;&lt;p&gt;结果与本地测试一致&#10;[hadoop@localhost testFile]$ hadoop fs -ls /logaccess/browserout&#10;18/04/11 06:15:18 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform&amp;hellip; using builtin-java classes where applicable&#10;Found 2 items&#10;-rw-r&amp;ndash;r&amp;ndash; 1 hadoop supergroup 0 2018-04-11 06:14 /logaccess/browserout/_SUCCESS&#10;-rw-r&amp;ndash;r&amp;ndash; 1 hadoop supergroup 32 2018-04-11 06:14 /logaccess/browserout/part-r-00000&#10;[hadoop@localhost testFile]$ hadoop fs -text /logaccess/browserout/part-r-00000&#10;18/04/11 06:15:32 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform&amp;hellip; using builtin-java classes where applicable&#10;Chrome 191&#10;Firefox 10&#10;Unknown 1&#10;增加其他属性重新运行MapReduce，结果如下&#10;[hadoop@localhost testFile]$ hadoop fs -ls /logaccess&#10;18/04/11 06:33:11 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform&amp;hellip; using builtin-java classes where applicable&#10;Found 2 items&#10;-rw-r&amp;ndash;r&amp;ndash; 1 hadoop supergroup 0 2018-04-11 06:32 /logaccess/_SUCCESS&#10;-rw-r&amp;ndash;r&amp;ndash; 1 hadoop supergroup 192 2018-04-11 06:32 /logaccess/part-r-00000&#10;[hadoop@localhost testFile]$ hadoop fs -text /logaccess/part-r-00000&#10;18/04/11 06:33:21 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform&amp;hellip; using builtin-java classes where applicable&#10;20100101 10&#10;537.36 191&#10;604.3.5 1&#10;Android 48&#10;Chrome 191&#10;Firefox 10&#10;Gecko 10&#10;Linux 48&#10;Unknown 1&#10;Webkit 192&#10;Windows 296&#10;Windows 7 10&#10;iPhone 1&#10;iPhone OS 11.1 1&#10;手机用户 49&#10;非手机用户 153&#10;日志离线统计完成！&lt;/p&gt;&#10;</description></item><item><title>单节点MapReduce开发</title><link>https://blog.fjy8018.top/archives/146/</link><pubDate>Tue, 17 Apr 2018 13:03:00 +0800</pubDate><guid>https://blog.fjy8018.top/archives/146/</guid><description>&lt;h2 id="官方原理解析"&gt;&lt;a href="#%e5%ae%98%e6%96%b9%e5%8e%9f%e7%90%86%e8%a7%a3%e6%9e%90" class="header-anchor"&gt;&lt;/a&gt;官方原理解析&#10;&lt;/h2&gt;&lt;h3 id="mapreduce演进"&gt;&lt;a href="#mapreduce%e6%bc%94%e8%bf%9b" class="header-anchor"&gt;&lt;/a&gt;MapReduce演进&#10;&lt;/h3&gt;&lt;p&gt;MapReduce2.x的架构&#10;&lt;img alt="官方原理解析" class="gallery-image" data-flex-basis="355px" data-flex-grow="147" height="388" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2Hnwbt.png" width="574"&gt;&lt;/p&gt;&#10;&lt;p&gt;MapReduce1.x的架构，一旦JobTracker挂了，整个分布式节点就崩溃了，因此被淘汰&#10;&lt;img alt="官方原理解析" class="gallery-image" data-flex-basis="391px" data-flex-grow="163" height="368" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2Hnt2T.jpg" width="600"&gt;&lt;/p&gt;&#10;&lt;h2 id="开发wordcount"&gt;&lt;a href="#%e5%bc%80%e5%8f%91wordcount" class="header-anchor"&gt;&lt;/a&gt;开发WordCount&#10;&lt;/h2&gt;&lt;h3 id="wordcount原理"&gt;&lt;a href="#wordcount%e5%8e%9f%e7%90%86" class="header-anchor"&gt;&lt;/a&gt;WordCount原理&#10;&lt;/h3&gt;&lt;p&gt;数据输入到MapReduce，每个MapReduce任务都被初始化为一个Job，每个Job又可以分为两种阶段：map阶段和reduce阶段。map方法接收一个&amp;lt;key,value&amp;gt;形式的输入，key表示词组偏移量，value表示该偏移量对应的值，然后同样产生一个&amp;lt;key,value&amp;gt;形式的中间输出，Hadoop函数接收一个如&amp;lt;key,(list of values)&amp;gt;形式的输入，list of values即Java中的集合，用于表示相同偏移量下的字符统计数量，然后对这个value集合进行处理，每个Reduce方法产生0或1个输出，reduce的输出也是&amp;lt;key,value&amp;gt;形式的。&#10;&lt;img alt="官方原理解析" class="gallery-image" data-flex-basis="461px" data-flex-grow="192" height="359" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2HnZ1M.jpg" width="690"&gt;&lt;/p&gt;&#10;&lt;p&gt;如果文本为&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;Hadoop Hello Hadoop &#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;实际过程大概为：&lt;/p&gt;&#10;&lt;p&gt;Mapping：&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;&amp;lt;Hadoop ,1&amp;gt;，&amp;lt;Hello,1&amp;gt;，&amp;lt;Hadoop ,1&amp;gt;&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;Shuffling：&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;&amp;lt;Hadoop ,1&amp;gt;，&amp;lt;Hadoop ,1&amp;gt;&#10;&amp;lt;Hello,1&amp;gt;&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;Reducing：&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;&amp;lt;Hadoop ,2&amp;gt;&#10;&amp;lt;Hello,1&amp;gt;&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;&lt;img alt="官方原理解析" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.fjy8018.top/images/recovered/6d3b91eec2ec6159544e.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;多节点下的并行计算原理示意图&#10;&lt;img alt="官方原理解析" class="gallery-image" data-flex-basis="278px" data-flex-grow="115" height="623" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2HnfEF.png" width="722"&gt;&lt;/p&gt;&#10;&lt;h3 id="开发代码"&gt;&lt;a href="#%e5%bc%80%e5%8f%91%e4%bb%a3%e7%a0%81" class="header-anchor"&gt;&lt;/a&gt;开发代码&#10;&lt;/h3&gt;&lt;h4 id="查看源码"&gt;&lt;a href="#%e6%9f%a5%e7%9c%8b%e6%ba%90%e7%a0%81" class="header-anchor"&gt;&lt;/a&gt;查看源码&#10;&lt;/h4&gt;&lt;p&gt;通过查看Mapper类的源码，发现官方已经定义的run方法，包含了所有基础的Mapper操作（模板方法设计模式），主要操作在map中，因此，只要重写map方法即可。&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="341px" data-flex-grow="142" height="931" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2HeOsr.png" width="1326"&gt;&lt;/p&gt;&#10;&lt;p&gt;同理Reduce类中也有类似的定义&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="375px" data-flex-grow="156" height="920" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2HeqIJ.png" width="1438"&gt;&lt;/p&gt;&#10;&lt;h4 id="重写方法"&gt;&lt;a href="#%e9%87%8d%e5%86%99%e6%96%b9%e6%b3%95" class="header-anchor"&gt;&lt;/a&gt;重写方法&#10;&lt;/h4&gt;&lt;p&gt;这里只列举部分代码，其余所有代码可去本人的GitHub中查看：&lt;a class="link" href="https://github.com/FJiayang/hadoopstudy" target="_blank" rel="noopener"&#10; &gt;GitHub链接&lt;/a&gt;&#10;/**&#10;* Map：读取输入文件&#10;* Text:类似字符串&#10;*/&#10;public static class MyMapper extends Mapper&amp;lt;LongWritable, Text, Text, LongWritable&amp;gt; {&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt; LongWritable one = new LongWritable(1);&#10;&#10; /**&#10; * @param key 偏移量&#10; * @param value 每行的字符串&#10; * @param context 上下文&#10; * @throws IOException&#10; * @throws InterruptedException&#10; */&#10; @Override&#10; protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {&#10; /*super.map(key, value, context);*/&#10;&#10; //接收到每一行数据&#10; String line = value.toString();&#10;&#10; //按照指定分隔符进行拆分&#10; /*line.split(&amp;quot;\t&amp;quot;);//以Tab分隔*/&#10; String[] words = line.split(&amp;quot; &amp;quot;);//以空格分隔&#10;&#10; for (String word : words) {&#10; //通过上下文把map的处理结果输出&#10; context.write(new Text(word), one);&#10; }&#10; }&#10;}&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;h3 id="运行"&gt;&lt;a href="#%e8%bf%90%e8%a1%8c" class="header-anchor"&gt;&lt;/a&gt;运行&#10;&lt;/h3&gt;&lt;p&gt;通过宝塔面板上传到服务器，确保此时Hadoop所有服务均为启动状态&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="521px" data-flex-grow="217" height="209" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2HlUXd.png" width="454"&gt;&lt;/p&gt;&#10;&lt;p&gt;在HDFS中预先创建好要测试的文件，通过绝对路径的方法&lt;code&gt;hadoop fs -ls hdfs://192.168.79.129:8020/&lt;/code&gt;确认文件是可以访问的&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="1067px" data-flex-grow="444" height="210" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2HlEaD.png" width="934"&gt;&lt;/p&gt;&#10;&lt;p&gt;输入运行命令即可运行&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; hadoop jar hadoopstudy-1.0-SNAPSHOT.jar com.fjy.hadoop.mapreduce.WordCountApp hdfs://192.168.79.129:8020/hello.txt hdfs://192.168.79.129:8020/output/wc&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;启动至&lt;code&gt;FileInputFormat&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@localhost testFile&lt;span class="o"&gt;]&lt;/span&gt;$ hadoop jar hadoopstudy-1.0-SNAPSHOT.jar com.fjy.hadoop.mapreduce.WordCountA2.168.79.129:8020/hello.txt hdfs://192.168.79.129:8020/output/wc&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 18/04/10 09:57:43 WARN util.NativeCodeLoader: Unable to load native-hadoop library &lt;span class="k"&gt;for&lt;/span&gt; your platform... using builtin-java classes where applicable&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 18/04/10 09:57:44 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:8032&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 18/04/10 09:57:45 WARN mapreduce.JobResourceUploader: Hadoop command-line option parsing not performed. Implement the Tool interface and execute your application with ToolRunner to remedy this.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 18/04/10 09:57:45 INFO input.**FileInputFormat**: Total input paths to process : &lt;span class="m"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;执行&lt;code&gt;Job&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 18/04/10 09:57:46 INFO mapreduce.JobSubmitter: number of splits:1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 18/04/10 09:57:46 INFO mapreduce.JobSubmitter: Submitting tokens &lt;span class="k"&gt;for&lt;/span&gt; job: job_1523322221448_0001&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 18/04/10 09:57:47 INFO impl.YarnClientImpl: Submitted application application_1523322221448_0001&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 18/04/10 09:57:47 INFO mapreduce.Job: The url to track the job: http://localhost:8088/proxy/application_1523322221448_0001/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 18/04/10 09:57:47 INFO mapreduce.Job: Running job: job_1523322221448_0001&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 18/04/10 09:57:56 INFO mapreduce.Job: Job job_1523322221448_0001 running in uber mode : &lt;span class="nb"&gt;false&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 18/04/10 09:57:56 INFO mapreduce.Job: map 0% reduce 0%&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 18/04/10 09:58:04 INFO mapreduce.Job: map 100% reduce 0%&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 18/04/10 09:58:10 INFO mapreduce.Job: map 100% reduce 100%&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 18/04/10 09:58:12 INFO mapreduce.Job: Job job_1523322221448_0001 completed successfully&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 18/04/10 09:58:12 INFO mapreduce.Job: Counters: &lt;span class="m"&gt;49&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; File System Counters&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; FILE: Number of bytes &lt;span class="nv"&gt;read&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;39&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; FILE: Number of bytes &lt;span class="nv"&gt;written&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;222915&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; FILE: Number of &lt;span class="nb"&gt;read&lt;/span&gt; &lt;span class="nv"&gt;operations&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; FILE: Number of large &lt;span class="nb"&gt;read&lt;/span&gt; &lt;span class="nv"&gt;operations&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; FILE: Number of write &lt;span class="nv"&gt;operations&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; HDFS: Number of bytes &lt;span class="nv"&gt;read&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;113&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; HDFS: Number of bytes &lt;span class="nv"&gt;written&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;17&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; HDFS: Number of &lt;span class="nb"&gt;read&lt;/span&gt; &lt;span class="nv"&gt;operations&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;6&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; HDFS: Number of large &lt;span class="nb"&gt;read&lt;/span&gt; &lt;span class="nv"&gt;operations&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; HDFS: Number of write &lt;span class="nv"&gt;operations&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Job Counters&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;Map&lt;/code&gt;方法执行&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Launched map &lt;span class="nv"&gt;tasks&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Launched reduce &lt;span class="nv"&gt;tasks&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Data-local map &lt;span class="nv"&gt;tasks&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Total &lt;span class="nb"&gt;time&lt;/span&gt; spent by all maps in occupied slots &lt;span class="o"&gt;(&lt;/span&gt;ms&lt;span class="o"&gt;)=&lt;/span&gt;&lt;span class="m"&gt;5920&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Total &lt;span class="nb"&gt;time&lt;/span&gt; spent by all reduces in occupied slots &lt;span class="o"&gt;(&lt;/span&gt;ms&lt;span class="o"&gt;)=&lt;/span&gt;&lt;span class="m"&gt;3321&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Total &lt;span class="nb"&gt;time&lt;/span&gt; spent by all map tasks &lt;span class="o"&gt;(&lt;/span&gt;ms&lt;span class="o"&gt;)=&lt;/span&gt;&lt;span class="m"&gt;5920&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Total &lt;span class="nb"&gt;time&lt;/span&gt; spent by all reduce tasks &lt;span class="o"&gt;(&lt;/span&gt;ms&lt;span class="o"&gt;)=&lt;/span&gt;&lt;span class="m"&gt;3321&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Total vcore-seconds taken by all map &lt;span class="nv"&gt;tasks&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;5920&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Total vcore-seconds taken by all reduce &lt;span class="nv"&gt;tasks&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;3321&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Total megabyte-seconds taken by all map &lt;span class="nv"&gt;tasks&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;6062080&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Total megabyte-seconds taken by all reduce &lt;span class="nv"&gt;tasks&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;3400704&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Map-Reduce Framework&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Map input &lt;span class="nv"&gt;records&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Map output &lt;span class="nv"&gt;records&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Map output &lt;span class="nv"&gt;bytes&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;29&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Map output materialized &lt;span class="nv"&gt;bytes&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;39&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;Reduce &lt;/code&gt;方法执行&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Input split &lt;span class="nv"&gt;bytes&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;101&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Combine input &lt;span class="nv"&gt;records&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Combine output &lt;span class="nv"&gt;records&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Reduce input &lt;span class="nv"&gt;groups&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Reduce shuffle &lt;span class="nv"&gt;bytes&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;39&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Reduce input &lt;span class="nv"&gt;records&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Reduce output &lt;span class="nv"&gt;records&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Spilled &lt;span class="nv"&gt;Records&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Shuffled &lt;span class="nv"&gt;Maps&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Failed &lt;span class="nv"&gt;Shuffles&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Merged Map &lt;span class="nv"&gt;outputs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; GC &lt;span class="nb"&gt;time&lt;/span&gt; elapsed &lt;span class="o"&gt;(&lt;/span&gt;ms&lt;span class="o"&gt;)=&lt;/span&gt;&lt;span class="m"&gt;115&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; CPU &lt;span class="nb"&gt;time&lt;/span&gt; spent &lt;span class="o"&gt;(&lt;/span&gt;ms&lt;span class="o"&gt;)=&lt;/span&gt;&lt;span class="m"&gt;1080&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Physical memory &lt;span class="o"&gt;(&lt;/span&gt;bytes&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;snapshot&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;300331008&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Virtual memory &lt;span class="o"&gt;(&lt;/span&gt;bytes&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;snapshot&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;5493092352&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Total committed heap usage &lt;span class="o"&gt;(&lt;/span&gt;bytes&lt;span class="o"&gt;)=&lt;/span&gt;&lt;span class="m"&gt;165810176&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;Shuffle &lt;/code&gt;方法执行&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Shuffle Errors&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;BAD_ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;CONNECTION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;IO_ERROR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;WRONG_LENGTH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;WRONG_MAP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;WRONG_REDUCE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sb"&gt;`&lt;/span&gt;File Input&lt;span class="sb"&gt;`&lt;/span&gt;和&lt;span class="sb"&gt;`&lt;/span&gt;File Output&lt;span class="sb"&gt;`&lt;/span&gt; 方法执行 &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; File Input Format Counters&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Bytes &lt;span class="nv"&gt;Read&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;12&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; File Output Format Counters&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Bytes &lt;span class="nv"&gt;Written&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;17&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;运行结果如图&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="673px" data-flex-grow="280" height="332" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2HlKEv.png" width="932"&gt;&lt;/p&gt;&#10;&lt;h3 id="进一步优化"&gt;&lt;a href="#%e8%bf%9b%e4%b8%80%e6%ad%a5%e4%bc%98%e5%8c%96" class="header-anchor"&gt;&lt;/a&gt;进一步优化&#10;&lt;/h3&gt;&lt;h4 id="使用combiner"&gt;&lt;a href="#%e4%bd%bf%e7%94%a8combiner" class="header-anchor"&gt;&lt;/a&gt;使用Combiner&#10;&lt;/h4&gt;&lt;p&gt;使用Combiner组件可以在Mapping时就先进行一次聚合，再发送到Shuffling继续运算，从而提高运算效率&#10;在主方法中进行如下配置即可&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;//通过job设置combiner处理类，逻辑上与reduce一致，注意，如果要计算平均数等不能使用Combiner!&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;job&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setCombinerClass&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MyReducer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;编写完后使用Maven重新打包&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; mvn clean package -DskipTests&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;上传到服务器后再次执行计算命令&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; hadoop jar hadoopstudy-0.3.jar com.fjy.hadoop.mapreduce.WordCountApp hdfs://192.168.79.129:8020/hello.txt hdfs://192.168.79.129:8020/output/wc&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;查看图形界面可观察是否完成&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="855px" data-flex-grow="356" height="526" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2riYsr.png" width="1874"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="902px" data-flex-grow="376" height="503" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2riK3F.png" width="1892"&gt;&lt;/p&gt;&#10;&lt;p&gt;通过查看代码可发现&lt;code&gt;Combine input records&lt;/code&gt;已经不为0(之前未使用Combiner 时该值为0)，说明使用成功&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt; Map-Reduce Framework&#10; Map input records=4&#10; ...&#10; Combine input records=9&#10; Combine output records=5&#10; ...&#10; Physical memory (bytes) snapshot=298844160&#10; Virtual memory (bytes) snapshot=5493088256&#10; Total committed heap usage (bytes)=165810176&#10; Shuffle Errors&#10; BAD_ID=0&#10; ...&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;查看结果&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@localhost testFile&lt;span class="o"&gt;]&lt;/span&gt;$ hadoop fs -cat /output/wc/part-r-00000&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 18/04/10 23:06:51 WARN util.NativeCodeLoader: Unable to load native-hadoop library &lt;span class="k"&gt;for&lt;/span&gt; your platform... using builtin-java classes where applicable&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ! &lt;span class="m"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Hadoop &lt;span class="m"&gt;3&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Hello &lt;span class="m"&gt;2&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; MapReduce &lt;span class="m"&gt;2&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; YARN &lt;span class="m"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="使用partitioner组件"&gt;&lt;a href="#%e4%bd%bf%e7%94%a8partitioner%e7%bb%84%e4%bb%b6" class="header-anchor"&gt;&lt;/a&gt;使用Partitioner组件&#10;&lt;/h2&gt;&lt;h3 id="作用"&gt;&lt;a href="#%e4%bd%9c%e7%94%a8" class="header-anchor"&gt;&lt;/a&gt;作用&#10;&lt;/h3&gt;&lt;p&gt;Partitioner决定MapTask输出的数据交由哪个ReduceTask处理，其默认实现为分发的key的hash值对ReduceTask个数取模&lt;/p&gt;&#10;&lt;h3 id="文件准备"&gt;&lt;a href="#%e6%96%87%e4%bb%b6%e5%87%86%e5%a4%87" class="header-anchor"&gt;&lt;/a&gt;文件准备&#10;&lt;/h3&gt;&lt;p&gt;在宝塔测试目录&lt;code&gt;/www/hadoop/testFile&lt;/code&gt;下准备好&lt;code&gt;PartitionerTest.txt&lt;/code&gt;文件，文件内容如图，将其上传到HDFS根目录中&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="547px" data-flex-grow="228" height="226" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/25VUyL.png" width="516"&gt;&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt; [hadoop@localhost root]$ cd /www/hadoop/testFile&#10; [hadoop@localhost testFile]$ ls&#10; PartitionerTest.txt hello.txt&#10; [hadoop@localhost testFile]$ hadoop fs -put PartitionerTest.txt /&#10; 18/04/11 00:30:31 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable&#10; [hadoop@localhost testFile]$ hadoop fs -ls /&#10; 18/04/11 00:30:39 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable&#10; Found 7 items&#10; -rw-r--r-- 1 hadoop supergroup 73 2018-04-11 00:30 /PartitionerTest.txt&#10; drwxr-xr-x - hadoop supergroup 0 2018-04-08 10:56 /hdfsapi&#10; -rw-r--r-- 1 hadoop supergroup 60 2018-04-10 23:03 /hello.txt&#10; drwxr-xr-x - hadoop supergroup 0 2018-04-10 23:05 /output&#10; drwxr-xr-x - hadoop supergroup 0 2018-04-08 10:35 /test&#10; drwx------ - hadoop supergroup 0 2018-04-09 20:11 /tmp&#10; drwxr-xr-x - hadoop supergroup 0 2018-04-09 20:11 /user&#10; [hadoop@localhost testFile]$ hadoop fs -text /PartitionerTest.txt&#10; 18/04/11 00:30:59 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable&#10; xiaomi 200&#10; huawei 300&#10; xiaomi 100&#10; huawei 200&#10; iphone 300&#10; iphone 200&#10; sony 50&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="代码编写"&gt;&lt;a href="#%e4%bb%a3%e7%a0%81%e7%bc%96%e5%86%99" class="header-anchor"&gt;&lt;/a&gt;代码编写&#10;&lt;/h3&gt;&lt;p&gt;主要对分隔符和上下文内容进行修改，&lt;code&gt;map&lt;/code&gt;类中修改为&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;//每一个空格是一个手机品牌，另一个是销售数量&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;words&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;0&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LongWritable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Long&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;parseLong&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;words&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;1&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;新增&lt;code&gt;Partitioner&lt;/code&gt;处理类&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/**&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Partitioner处理类&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyPartitioner&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;extends&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Partitioner&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;LongWritable&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nd"&gt;@Override&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getPartition&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LongWritable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;xiaomi&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;equals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;()))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="c1"&gt;//若为xiaomi则交由0 ReduceTask处理&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;huawei&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;equals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;()))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="c1"&gt;//若为huawei则交由1 ReduceTask处理&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;iphone&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;equals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;()))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="c1"&gt;//若为iphone则交由2 ReduceTask处理&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="c1"&gt;//若为其他，则交由3 ReduceTask处理&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;最后在驱动中配置&lt;code&gt;Partitioner&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;//设置job的Partition&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;job&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setPartitionerClass&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MyPartitioner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;//设置四个reducer，每个分区一个，否则Partitioner配置不生效&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;job&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setNumReduceTasks&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;4&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;通过复制类名全路径（以IDEA为例），修改运行命令&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="681px" data-flex-grow="284" height="269" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/25VsmW.png" width="764"&gt;&lt;/p&gt;&#10;&lt;p&gt;此时，运行命令为&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; hadoop jar hadoopstudy-0.4.jar com.fjy.hadoop.mapreduce.WordCountPartitionerApp hdfs://192.168.79.129:8020/PartitionerTest.txt hdfs://192.168.79.129:8020/output/partitioner&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="执行"&gt;&lt;a href="#%e6%89%a7%e8%a1%8c" class="header-anchor"&gt;&lt;/a&gt;执行&#10;&lt;/h3&gt;&lt;p&gt;再次用Maven打包并上传到测试目录运行&#10;运行前：&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="776px" data-flex-grow="323" height="530" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/25Vzaw.png" width="1714"&gt;&lt;/p&gt;&#10;&lt;p&gt;运行中：&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="912px" data-flex-grow="380" height="500" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/25VKn8.png" width="1901"&gt;&lt;/p&gt;&#10;&lt;p&gt;运行结束&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="1183px" data-flex-grow="493" height="385" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/25VDDR.png" width="1899"&gt;&lt;/p&gt;&#10;&lt;p&gt;查看结果内容：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@localhost testFile&lt;span class="o"&gt;]&lt;/span&gt;$ hadoop fs -ls /output/partitioner&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 18/04/11 00:36:28 WARN util.NativeCodeLoader: Unable to load native-hadoop library &lt;span class="k"&gt;for&lt;/span&gt; your platform... using builtin-java classes where applicable&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Found &lt;span class="m"&gt;5&lt;/span&gt; items&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -rw-r--r-- &lt;span class="m"&gt;1&lt;/span&gt; hadoop supergroup &lt;span class="m"&gt;0&lt;/span&gt; 2018-04-11 00:35 /output/partitioner/_SUCCESS&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -rw-r--r-- &lt;span class="m"&gt;1&lt;/span&gt; hadoop supergroup &lt;span class="m"&gt;11&lt;/span&gt; 2018-04-11 00:35 /output/partitioner/part-r-00000&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -rw-r--r-- &lt;span class="m"&gt;1&lt;/span&gt; hadoop supergroup &lt;span class="m"&gt;11&lt;/span&gt; 2018-04-11 00:35 /output/partitioner/part-r-00001&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -rw-r--r-- &lt;span class="m"&gt;1&lt;/span&gt; hadoop supergroup &lt;span class="m"&gt;11&lt;/span&gt; 2018-04-11 00:35 /output/partitioner/part-r-00002&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -rw-r--r-- &lt;span class="m"&gt;1&lt;/span&gt; hadoop supergroup &lt;span class="m"&gt;8&lt;/span&gt; 2018-04-11 00:35 /output/partitioner/part-r-00003&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@localhost testFile&lt;span class="o"&gt;]&lt;/span&gt;$ hadoop fs -text /output/partitioner/part-r-00000&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 18/04/11 00:36:53 WARN util.NativeCodeLoader: Unable to load native-hadoop library &lt;span class="k"&gt;for&lt;/span&gt; your platform... using builtin-java classes where applicable&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; xiaomi &lt;span class="m"&gt;300&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@localhost testFile&lt;span class="o"&gt;]&lt;/span&gt;$ hadoop fs -text /output/partitioner/part-r-00001&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 18/04/11 00:36:58 WARN util.NativeCodeLoader: Unable to load native-hadoop library &lt;span class="k"&gt;for&lt;/span&gt; your platform... using builtin-java classes where applicable&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; huawei &lt;span class="m"&gt;500&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@localhost testFile&lt;span class="o"&gt;]&lt;/span&gt;$ hadoop fs -text /output/partitioner/part-r-00002&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 18/04/11 00:37:05 WARN util.NativeCodeLoader: Unable to load native-hadoop library &lt;span class="k"&gt;for&lt;/span&gt; your platform... using builtin-java classes where applicable&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; iphone &lt;span class="m"&gt;500&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@localhost testFile&lt;span class="o"&gt;]&lt;/span&gt;$ hadoop fs -text /output/partitioner/part-r-00003&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 18/04/11 00:37:12 WARN util.NativeCodeLoader: Unable to load native-hadoop library &lt;span class="k"&gt;for&lt;/span&gt; your platform... using builtin-java classes where applicable&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; sony &lt;span class="m"&gt;50&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;结果正确！&lt;/p&gt;&#10;&lt;h2 id="开启jobhistory"&gt;&lt;a href="#%e5%bc%80%e5%90%afjobhistory" class="header-anchor"&gt;&lt;/a&gt;开启JobHistory&#10;&lt;/h2&gt;&lt;h3 id="jobhistory作用"&gt;&lt;a href="#jobhistory%e4%bd%9c%e7%94%a8" class="header-anchor"&gt;&lt;/a&gt;JobHistory作用&#10;&lt;/h3&gt;&lt;p&gt;记录已经运行完 的MapReduce信息到指定的HDFS目录下，但默认不开启&#10;因此此时不配置直接访问如下&lt;/p&gt;&#10;&lt;p&gt;![jobhistory][33]&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="jobhistory" class="gallery-image" data-flex-basis="774px" data-flex-grow="322" height="375" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/25wHdi.png" width="1210"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="jobhistory" class="gallery-image" data-flex-basis="387px" data-flex-grow="161" height="511" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/25wGpv.png" width="826"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="jobhistory" class="gallery-image" data-flex-basis="400px" data-flex-grow="166" height="450" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/25wcPa.png" width="751"&gt;&lt;/p&gt;&#10;&lt;h3 id="配置jobhistory"&gt;&lt;a href="#%e9%85%8d%e7%bd%aejobhistory" class="header-anchor"&gt;&lt;/a&gt;配置JobHistory&#10;&lt;/h3&gt;&lt;p&gt;在&lt;code&gt;mapred-site.xml&lt;/code&gt;加入配置&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;&amp;lt;!-- jobhistory地址--&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;mapreduce.jobhistory.address&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;192.168.79.129:10020&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&lt;span class="nt"&gt;&amp;lt;description&amp;gt;&lt;/span&gt;MapReduce JobHistory Server IPC host:port&lt;span class="nt"&gt;&amp;lt;/description&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;&amp;lt;!-- jobhistory web的地址--&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;mapreduce.jobhistory.webapp.address&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;192.168.79.129:19888&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&lt;span class="nt"&gt;&amp;lt;description&amp;gt;&lt;/span&gt;MapReduce JobHistory Server Web UI host:port&lt;span class="nt"&gt;&amp;lt;/description&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;&amp;lt;!-- 作业运行完存放地址--&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;mapreduce.jobhistory.done-dir&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;/history/done&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;&amp;lt;!-- 作业运行中存放地址--&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;mapreduce.jobhistory.intermediate-done-dir&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;/history/done_intermediate&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt="jobhistory" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="786" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/25wCMd.png" width="592"&gt;&lt;/p&gt;&#10;&lt;p&gt;配置完后重启YARN&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@localhost mapreduce&lt;span class="o"&gt;]&lt;/span&gt;$ &lt;span class="nb"&gt;cd&lt;/span&gt; /www/hadoop/hadoop-2.6.0-cdh5.7.0/sbin&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@localhost sbin&lt;span class="o"&gt;]&lt;/span&gt;$ ./stop-yarn.sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; stopping yarn daemons&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; stopping resourcemanager&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; localhost: stopping nodemanager&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; no proxyserver to stop&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@localhost sbin&lt;span class="o"&gt;]&lt;/span&gt;$ jps&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;2353&lt;/span&gt; DataNode&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;80224&lt;/span&gt; Jps&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;2228&lt;/span&gt; NameNode&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;2522&lt;/span&gt; SecondaryNameNode&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@localhost sbin&lt;span class="o"&gt;]&lt;/span&gt;$ ./start-yarn.sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; starting yarn daemons&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; starting resourcemanager, logging to /www/hadoop/hadoop-2.6.0-cdh5.7.0/logs/yarn-hadoop-resourcemanager-localhost.localdomain.out&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; localhost: starting nodemanager, logging to /www/hadoop/hadoop-2.6.0-cdh5.7.0/logs/yarn-hadoop-nodemanager-localhost.localdomain.out&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@localhost mapreduce&lt;span class="o"&gt;]&lt;/span&gt;$ jps&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;2353&lt;/span&gt; DataNode&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;80336&lt;/span&gt; ResourceManager&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;2228&lt;/span&gt; NameNode&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;81510&lt;/span&gt; Jps&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;2522&lt;/span&gt; SecondaryNameNode&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;63582&lt;/span&gt; JobHistoryServer&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;80447&lt;/span&gt; NodeManager&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;启动jobhistory服务&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@localhost sbin&lt;span class="o"&gt;]&lt;/span&gt;$ ./mr-jobhistory-daemon.sh start historyserver&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; starting historyserver, logging to /www/hadoop/hadoop-2.6.0-cdh5.7.0/logs/mapred-hadoop-historyserver-localhost.localdomain.out&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;运行PI测试&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@localhost sbin&lt;span class="o"&gt;]&lt;/span&gt;$ &lt;span class="nb"&gt;cd&lt;/span&gt; /www/hadoop/hadoop-2.6.0-cdh5.7.0/share/hadoop/mapreduce&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@localhost mapreduce&lt;span class="o"&gt;]&lt;/span&gt;$ hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar pi &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="访问报错"&gt;&lt;a href="#%e8%ae%bf%e9%97%ae%e6%8a%a5%e9%94%99" class="header-anchor"&gt;&lt;/a&gt;访问报错&#10;&lt;/h4&gt;&lt;p&gt;进入日志查看，发现仍然无法访问&#10;&lt;img alt="jobhistory" class="gallery-image" data-flex-basis="982px" data-flex-grow="409" height="378" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/25w1gu.png" width="1548"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="jobhistory" class="gallery-image" data-flex-basis="374px" data-flex-grow="155" height="659" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/25w4GD.png" width="1027"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="jobhistory" class="gallery-image" data-flex-basis="2125px" data-flex-grow="885" height="195" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/25wZVT.png" width="1727"&gt;&lt;/p&gt;&#10;&lt;p&gt;报未开启聚合的错误，同时发现指向跳转链接为&lt;code&gt;localhost&lt;/code&gt;&#10;&lt;img alt="jobhistory" class="gallery-image" data-flex-basis="1402px" data-flex-grow="584" height="267" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/25wn3J.png" width="1560"&gt;&lt;/p&gt;&#10;&lt;h4 id="增加配置"&gt;&lt;a href="#%e5%a2%9e%e5%8a%a0%e9%85%8d%e7%bd%ae" class="header-anchor"&gt;&lt;/a&gt;增加配置&#10;&lt;/h4&gt;&lt;p&gt;因此在&lt;code&gt;yarn-site.xml&lt;/code&gt;加入配置&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;&amp;lt;!-- 开启YARN log的聚合功能--&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;yarn.log-aggregation-enable&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&#9;&lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;true&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;&lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;同时，为了让虚拟机的跳转链接不为&lt;code&gt;localhost&lt;/code&gt;，此处再加入一段配置，制定IP&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;yarn.nodemanager.hostname&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;192.168.79.129&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt="jobhistory" class="gallery-image" data-flex-basis="308px" data-flex-grow="128" height="405" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/25wwGM.png" width="520"&gt;&lt;/p&gt;&#10;&lt;h3 id="重启服务"&gt;&lt;a href="#%e9%87%8d%e5%90%af%e6%9c%8d%e5%8a%a1" class="header-anchor"&gt;&lt;/a&gt;重启服务&#10;&lt;/h3&gt;&lt;p&gt;再次重启YARN，并同时&lt;strong&gt;重启jobhistory服务&lt;/strong&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@localhost sbin&lt;span class="o"&gt;]&lt;/span&gt;$ ./mr-jobhistory-daemon.sh stop historyserver&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; stopping historyserver&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@localhost sbin&lt;span class="o"&gt;]&lt;/span&gt;$ ./stop-yarn.sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; stopping yarn daemons&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; stopping resourcemanager&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; localhost: stopping nodemanager&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; no proxyserver to stop&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@localhost sbin&lt;span class="o"&gt;]&lt;/span&gt;$ ./start-yarn.sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; starting yarn daemons&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; starting resourcemanager, logging to /www/hadoop/hadoop-2.6.0-cdh5.7.0/logs/yarn-hadoop-resourcemanager-localhost.localdomain.out&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; localhost: starting nodemanager, logging to /www/hadoop/hadoop-2.6.0-cdh5.7.0/logs/yarn-hadoop-nodemanager-localhost.localdomain.out&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@localhost sbin&lt;span class="o"&gt;]&lt;/span&gt;$ ./mr-jobhistory-daemon.sh start historyserver&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; starting historyserver, logging to /www/hadoop/hadoop-2.6.0-cdh5.7.0/logs/mapred-hadoop-historyserver-localhost.localdomain.out&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;【注意】此时若只重启YARN就算配置正确，仍然可能出现&lt;code&gt;Aggregation is not enabled&lt;/code&gt;的错误&lt;/p&gt;&#10;&lt;h3 id="验证"&gt;&lt;a href="#%e9%aa%8c%e8%af%81" class="header-anchor"&gt;&lt;/a&gt;验证&#10;&lt;/h3&gt;&lt;p&gt;再次执行PI运算&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@localhost sbin&lt;span class="o"&gt;]&lt;/span&gt;$ &lt;span class="nb"&gt;cd&lt;/span&gt; /www/hadoop/hadoop-2.6.0-cdh5.7.0/share/hadoop/mapreduce&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;hadoop@localhost mapreduce&lt;span class="o"&gt;]&lt;/span&gt;$ hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar pi &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;查看Logs记录&#10;&lt;img alt="jobhistory" class="gallery-image" data-flex-basis="369px" data-flex-grow="153" height="762" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/25w6YF.png" width="1172"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="jobhistory" class="gallery-image" data-flex-basis="369px" data-flex-grow="153" height="762" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/25wfpt.png" width="1172"&gt;&lt;/p&gt;&#10;&lt;p&gt;已经有日志记录，配置成功！&#10;&lt;img alt="jobhistory" class="gallery-image" data-flex-basis="369px" data-flex-grow="153" height="762" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/25wiur.png" width="1172"&gt;&lt;/p&gt;&#10;</description></item><item><title>YARN单节点伪分布式搭建</title><link>https://blog.fjy8018.top/archives/144/</link><pubDate>Mon, 09 Apr 2018 20:14:00 +0800</pubDate><guid>https://blog.fjy8018.top/archives/144/</guid><description>&lt;h2 id="配置yarn"&gt;&lt;a href="#%e9%85%8d%e7%bd%aeyarn" class="header-anchor"&gt;&lt;/a&gt;配置YARN&#10;&lt;/h2&gt;&lt;p&gt;首先启动之前配置好的HDFS服务，然后进入&lt;code&gt;/www/hadoop/hadoop-2.6.0-cdh5.7.0/etc/hadoop&lt;/code&gt;目录，按照官方指导配置YARN单节点环境&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="400px" data-flex-grow="166" height="598" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2mE8vN.png" width="997"&gt;&lt;/p&gt;&#10;&lt;p&gt;使用&lt;code&gt;cp mapred-site.xml.template mapred-site.xml&lt;/code&gt;命令把&lt;code&gt;mapred-site.xml.template&lt;/code&gt;复制一份，加入官方的配置&#10;&lt;property&gt;&#10;&lt;name&gt;mapreduce.framework.name&lt;/name&gt;&#10;&lt;value&gt;yarn&lt;/value&gt;&#10;&lt;/property&gt;&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="306px" data-flex-grow="127" height="514" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2mEHYc.png" width="657"&gt;&lt;/p&gt;&#10;&lt;p&gt;同时对&lt;code&gt;yarn-site.xml&lt;/code&gt;也进行配置&#10;&lt;property&gt;&#10;&lt;name&gt;yarn.nodemanager.aux-services&lt;/name&gt;&#10;&lt;value&gt;mapreduce_shuffle&lt;/value&gt;&#10;&lt;/property&gt;&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="299px" data-flex-grow="124" height="485" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2mE5lK.png" width="605"&gt;&lt;/p&gt;&#10;&lt;h2 id="启动yarn"&gt;&lt;a href="#%e5%90%af%e5%8a%a8yarn" class="header-anchor"&gt;&lt;/a&gt;启动YARN&#10;&lt;/h2&gt;&lt;p&gt;进入&lt;code&gt;/www/hadoop/hadoop-2.6.0-cdh5.7.0/sbin&lt;/code&gt;目录，使用&lt;code&gt;./start-yarn.sh&lt;/code&gt;命令启动YARN服务&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;[hadoop@localhost sbin]$ ./start-yarn.sh&#10;starting yarn daemons&#10;starting resourcemanager, logging to /www/hadoop/hadoop-2.6.0-cdh5.7.0/logs/yarn-hadoop-resourcemanager-localhost.localdomain.out&#10;localhost: starting nodemanager, logging to /www/hadoop/hadoop-2.6.0-cdh5.7.0/logs/yarn-hadoop-nodemanager-localhost.localdomain.out&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;用&lt;code&gt;jps&lt;/code&gt;命令查看是否启动成功，看到如下显示即为启动成功，主要是&lt;strong&gt;NodeManager&lt;/strong&gt;和&lt;strong&gt;ResourceManager&lt;/strong&gt;两个服务&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;[hadoop@localhost sbin]$ jps&#10;7056 SecondaryNameNode&#10;7475 NodeManager&#10;6775 NameNode&#10;6872 DataNode&#10;7374 ResourceManager&#10;7679 Jps&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;h2 id="开放端口"&gt;&lt;a href="#%e5%bc%80%e6%94%be%e7%ab%af%e5%8f%a3" class="header-anchor"&gt;&lt;/a&gt;开放端口&#10;&lt;/h2&gt;&lt;p&gt;YARN的浏览器客户端占用8088端口，故使用宝塔面板开放8088端口&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="3825px" data-flex-grow="1593" height="48" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2mEqP6.png" width="765"&gt;&lt;/p&gt;&#10;&lt;h2 id="访问yarn图形化界面"&gt;&lt;a href="#%e8%ae%bf%e9%97%aeyarn%e5%9b%be%e5%bd%a2%e5%8c%96%e7%95%8c%e9%9d%a2" class="header-anchor"&gt;&lt;/a&gt;访问YARN图形化界面&#10;&lt;/h2&gt;&lt;p&gt;使用浏览器打开&lt;code&gt;http://ip:8088/&lt;/code&gt;可见如下界面，则YARN启动成功&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="686px" data-flex-grow="286" height="423" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2mEhVT.png" width="1210"&gt;&lt;/p&gt;&#10;&lt;h2 id="测试"&gt;&lt;a href="#%e6%b5%8b%e8%af%95" class="header-anchor"&gt;&lt;/a&gt;测试&#10;&lt;/h2&gt;&lt;p&gt;YARN官方提供了示例java程序来测试资源调度，进入&lt;code&gt;/www/hadoop/hadoop-2.6.0-cdh5.7.0/share/hadoop/mapreduce&lt;/code&gt;目录，可见&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;[hadoop@localhost mapreduce]$ ls&#10;hadoop-mapreduce-client-app-2.6.0-cdh5.7.0.jar hadoop-mapreduce-client-nativetask-2.6.0-cdh5.7.0.jar&#10;hadoop-mapreduce-client-common-2.6.0-cdh5.7.0.jar hadoop-mapreduce-client-shuffle-2.6.0-cdh5.7.0.jar&#10;hadoop-mapreduce-client-core-2.6.0-cdh5.7.0.jar hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar&#10;hadoop-mapreduce-client-hs-2.6.0-cdh5.7.0.jar lib&#10;hadoop-mapreduce-client-hs-plugins-2.6.0-cdh5.7.0.jar lib-examples&#10;hadoop-mapreduce-client-jobclient-2.6.0-cdh5.7.0.jar sources&#10;hadoop-mapreduce-client-jobclient-2.6.0-cdh5.7.0-tests.jar&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;其中&lt;code&gt;hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar&lt;/code&gt;就是MapReduce的测试程序，通过&lt;code&gt;hadoop jar&lt;/code&gt;的方式来运行&#10;用命令查看可配置的参数&lt;code&gt;hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar&lt;/code&gt;&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;[hadoop@localhost mapreduce]$ hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar&#10;An example program must be given as the first argument.&#10;Valid program names are:&#10; aggregatewordcount: An Aggregate based map/reduce program that counts the words in the input files.&#10; aggregatewordhist: An Aggregate based map/reduce program that computes the histogram of the words in the input files.&#10; bbp: A map/reduce program that uses Bailey-Borwein-Plouffe to compute exact digits of Pi.&#10; dbcount: An example job that count the pageview counts from a database.&#10; distbbp: A map/reduce program that uses a BBP-type formula to compute exact bits of Pi.&#10; grep: A map/reduce program that counts the matches of a regex in the input.&#10; join: A job that effects a join over sorted, equally partitioned datasets&#10; multifilewc: A job that counts words from several files.&#10; pentomino: A map/reduce tile laying program to find solutions to pentomino problems.&#10; pi: A map/reduce program that estimates Pi using a quasi-Monte Carlo method.&#10; randomtextwriter: A map/reduce program that writes 10GB of random textual data per node.&#10; randomwriter: A map/reduce program that writes 10GB of random data per node.&#10; secondarysort: An example defining a secondary sort to the reduce.&#10; sort: A map/reduce program that sorts the data written by the random writer.&#10; sudoku: A sudoku solver.&#10; teragen: Generate data for the terasort&#10; terasort: Run the terasort&#10; teravalidate: Checking results of terasort&#10; wordcount: A map/reduce program that counts the words in the input files.&#10; wordmean: A map/reduce program that counts the average length of the words in the input files.&#10; wordmedian: A map/reduce program that counts the median length of the words in the input files.&#10; wordstandarddeviation: A map/reduce program that counts the standard deviation of the length of the words in the input files.&#10;[hadoop@localhost mapreduce]$ hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar pi&#10;Usage: org.apache.hadoop.examples.QuasiMonteCarlo &amp;lt;nMaps&amp;gt; &amp;lt;nSamples&amp;gt;&#10;Generic options supported are&#10;-conf &amp;lt;configuration file&amp;gt; specify an application configuration file&#10;-D &amp;lt;property=value&amp;gt; use value for given property&#10;-fs &amp;lt;local|namenode:port&amp;gt; specify a namenode&#10;-jt &amp;lt;local|resourcemanager:port&amp;gt; specify a ResourceManager&#10;-files &amp;lt;comma separated list of files&amp;gt; specify comma separated files to be copied to the map reduce cluster&#10;-libjars &amp;lt;comma separated list of jars&amp;gt; specify comma separated jar files to include in the classpath.&#10;-archives &amp;lt;comma separated list of archives&amp;gt; specify comma separated archives to be unarchived on the compute machines.&#10;&#10;The general command line syntax is&#10;bin/hadoop command [genericOptions] [commandOptions]&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;从上可知测试程序可以做诸如数学π、随机文件写入等操作，这里做数学π的运算&#10;使用命令&lt;code&gt;hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar pi 2 3&lt;/code&gt;做两个map计算精度为3的数学π运算,运算结束后会显示结果如下&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;Job Finished in 26.996 seconds&#10;Estimated value of Pi is 4.00000000000000000000&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;同时浏览器也可看到作业情况&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="983px" data-flex-grow="409" height="464" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2mE3pt.png" width="1901"&gt;&lt;/p&gt;&#10;</description></item><item><title>HDFS伪分布式单节点搭建</title><link>https://blog.fjy8018.top/archives/141/</link><pubDate>Sat, 07 Apr 2018 13:01:00 +0800</pubDate><guid>https://blog.fjy8018.top/archives/141/</guid><description>&lt;h2 id="环境"&gt;&lt;a href="#%e7%8e%af%e5%a2%83" class="header-anchor"&gt;&lt;/a&gt;环境&#10;&lt;/h2&gt;&lt;p&gt;系统：CentOS Linux 7.4.1708 (Core)&#10;客户端：putty&#10;服务器：虚拟机1core、2G RAM&#10;同时搭建了宝塔面板（自动配置了java8）&lt;/p&gt;&#10;&lt;h2 id="hadoop下载"&gt;&lt;a href="#hadoop%e4%b8%8b%e8%bd%bd" class="header-anchor"&gt;&lt;/a&gt;Hadoop下载&#10;&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="http://archive.cloudera.com/cdh5/cdh/5/" target="_blank" rel="noopener"&#10; &gt;CDH版本Hadoop下载&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;为了统一版本，全部使用&lt;code&gt;hadoop-2.6.0-cdh5.7.0&lt;/code&gt;&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="305px" data-flex-grow="127" height="713" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2cfh4e.png" width="908"&gt;&lt;/p&gt;&#10;&lt;p&gt;点击可进入官方推荐配置页&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="411px" data-flex-grow="171" height="564" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2cfvbs.png" width="966"&gt;&lt;/p&gt;&#10;&lt;h2 id="解压并配置"&gt;&lt;a href="#%e8%a7%a3%e5%8e%8b%e5%b9%b6%e9%85%8d%e7%bd%ae" class="header-anchor"&gt;&lt;/a&gt;解压并配置&#10;&lt;/h2&gt;&lt;p&gt;将下载好的文件通过宝塔上传到服务器，这里选择上传到&lt;code&gt;/www/hadoop&lt;/code&gt;目录&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="656px" data-flex-grow="273" height="368" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2cfPj1.png" width="1007"&gt;&lt;/p&gt;&#10;&lt;p&gt;解压tar包&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="3965px" data-flex-grow="1652" height="61" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2cfF40.png" width="1008"&gt;&lt;/p&gt;&#10;&lt;h3 id="配置"&gt;&lt;a href="#%e9%85%8d%e7%bd%ae" class="header-anchor"&gt;&lt;/a&gt;配置&#10;&lt;/h3&gt;&lt;h4 id="新建用户"&gt;&lt;a href="#%e6%96%b0%e5%bb%ba%e7%94%a8%e6%88%b7" class="header-anchor"&gt;&lt;/a&gt;新建用户&#10;&lt;/h4&gt;&lt;p&gt;新建hadoop用户，忽略密码强度提示&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; adduser hadoop&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; passwd hadoop&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="715px" data-flex-grow="298" height="152" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2cu6Ht.png" width="453"&gt;&lt;/p&gt;&#10;&lt;p&gt;为方便远程连接和学习，同时授予root权限，输入&lt;code&gt;whereis sudoers&lt;/code&gt;查看权限控制文件位置&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;root@fjy ~&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="c1"&gt;# whereis sudoers&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; sudoers: /etc/sudoers /etc/sudoers.d /usr/libexec/sudoers.so /usr/share/man/man5/sudoers.5.gz&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;使用宝塔找到并修改/etc/sudoers文件&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="1212px" data-flex-grow="505" height="338" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2cuIpF.png" width="1707"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="289px" data-flex-grow="120" height="487" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2cuidr.png" width="587"&gt;&lt;/p&gt;&#10;&lt;h4 id="配置新用户免密码远程登录"&gt;&lt;a href="#%e9%85%8d%e7%bd%ae%e6%96%b0%e7%94%a8%e6%88%b7%e5%85%8d%e5%af%86%e7%a0%81%e8%bf%9c%e7%a8%8b%e7%99%bb%e5%bd%95" class="header-anchor"&gt;&lt;/a&gt;配置新用户免密码远程登录&#10;&lt;/h4&gt;&lt;p&gt;切换至&lt;code&gt;hadoop&lt;/code&gt;用户，使用 &lt;code&gt;ssh-keygen -t rsa&lt;/code&gt;生成私钥信息，位置在&lt;code&gt;/home/hadoop/&lt;/code&gt;，并且忽略所有提示输入的信息&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="355px" data-flex-grow="148" height="352" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2cul30.png" width="522"&gt;&lt;/p&gt;&#10;&lt;p&gt;查看生成的文件，该SSH文件夹为隐藏文件夹，故用&lt;code&gt;ls -a&lt;/code&gt;查看，可见自动生成了&lt;code&gt;.ssh&lt;/code&gt;目录和&lt;code&gt;id_rsa&lt;/code&gt;,&lt;code&gt;id_rsa.pub&lt;/code&gt;两个文件&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="1346px" data-flex-grow="560" height="166" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2cuus1.png" width="931"&gt;&lt;/p&gt;&#10;&lt;p&gt;复制公钥到.ssh目录&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="2788px" data-flex-grow="1161" height="47" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2cueCJ.png" width="546"&gt;&lt;/p&gt;&#10;&lt;h4 id="查看java目录"&gt;&lt;a href="#%e6%9f%a5%e7%9c%8bjava%e7%9b%ae%e5%bd%95" class="header-anchor"&gt;&lt;/a&gt;查看JAVA目录&#10;&lt;/h4&gt;&lt;p&gt;因为是宝塔自动配置的java8，所以要首先查看当前java环境变量位置，使用如下命令&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; update-alternatives --config java&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="837px" data-flex-grow="348" height="147" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2cfTla.png" width="513"&gt;&lt;/p&gt;&#10;&lt;p&gt;此时宝塔自动将java配置到&lt;code&gt;/usr/java/jdk1.8.0_121/jre/bin/java&lt;/code&gt;目录&#10;即&lt;code&gt;/usr/java/jdk1.8.0_121&lt;/code&gt;为java环境变量的目录&lt;/p&gt;&#10;&lt;h4 id="配置hadoop的java目录"&gt;&lt;a href="#%e9%85%8d%e7%bd%aehadoop%e7%9a%84java%e7%9b%ae%e5%bd%95" class="header-anchor"&gt;&lt;/a&gt;配置hadoop的java目录&#10;&lt;/h4&gt;&lt;p&gt;使用宝塔进入hadoop目录下的&lt;code&gt;etc/hadoop/hadoop-env.sh&lt;/code&gt;，对应此处的绝对路径应为&lt;code&gt;/www/hadoop/hadoop-2.6.0-cdh5.7.0/etc/hadoop&lt;/code&gt;&#10;使用宝塔编辑文件，加入java环境变量位置&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="3168px" data-flex-grow="1320" height="74" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2c6JvX.png" width="977"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="278px" data-flex-grow="115" height="520" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2c6tMj.png" width="603"&gt;&lt;/p&gt;&#10;&lt;h4 id="配置分布式文件参数"&gt;&lt;a href="#%e9%85%8d%e7%bd%ae%e5%88%86%e5%b8%83%e5%bc%8f%e6%96%87%e4%bb%b6%e5%8f%82%e6%95%b0" class="header-anchor"&gt;&lt;/a&gt;配置分布式文件参数&#10;&lt;/h4&gt;&lt;p&gt;打开&lt;code&gt;core-site.xml&lt;/code&gt;，配置如下&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;fs.defaultFS&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;&amp;lt;!-- 配置主机IP--&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;hdfs://192.168.79.129:8020&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;&amp;lt;!-- 配置临时文件位置--&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;hadoop.tmp.dir&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;/www/hadoop/tmp&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="276px" data-flex-grow="115" height="575" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2c6k6y.png" width="662"&gt;&lt;/p&gt;&#10;&lt;p&gt;打开&lt;code&gt;hdfs-site.xml&lt;/code&gt;，配置如下&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;dfs.replication&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;&amp;lt;!-- 配置副本数量--&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;1&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="267px" data-flex-grow="111" height="489" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2cldpc.png" width="545"&gt;&lt;/p&gt;&#10;&lt;h2 id="启动"&gt;&lt;a href="#%e5%90%af%e5%8a%a8" class="header-anchor"&gt;&lt;/a&gt;启动&#10;&lt;/h2&gt;&lt;h3 id="初始化"&gt;&lt;a href="#%e5%88%9d%e5%a7%8b%e5%8c%96" class="header-anchor"&gt;&lt;/a&gt;初始化&#10;&lt;/h3&gt;&lt;p&gt;进入&lt;code&gt;/www/hadoop/hadoop-2.6.0-cdh5.7.0/bin&lt;/code&gt;目录，使用如下语句初始化Hadoop，该操作仅执行一次即可，以后使用无需重复执行，否则执行后会删除当前hadoop上的所有文件&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; hadoop namenode -format&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="480px" data-flex-grow="200" height="465" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2cufgM.png" width="931"&gt;&lt;/p&gt;&#10;&lt;p&gt;滚动均为&lt;code&gt;info&lt;/code&gt;级别的日志&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="454px" data-flex-grow="189" height="466" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2cuZPT.png" width="882"&gt;&lt;/p&gt;&#10;&lt;p&gt;可看到已初始化成功&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="1457px" data-flex-grow="607" height="153" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2cutO6.png" width="929"&gt;&lt;/p&gt;&#10;&lt;h3 id="启动hdfs"&gt;&lt;a href="#%e5%90%af%e5%8a%a8hdfs" class="header-anchor"&gt;&lt;/a&gt;启动HDFS&#10;&lt;/h3&gt;&lt;p&gt;切换到hadoop用户，进入&lt;code&gt;/www/hadoop/hadoop-2.6.0-cdh5.7.0/sbin&lt;/code&gt;目录&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="1554px" data-flex-grow="647" height="132" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2cuJ3e.png" width="855"&gt;&lt;/p&gt;&#10;&lt;p&gt;输入&lt;code&gt;./start-dfs.sh&lt;/code&gt;启动HDFS服务&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="1055px" data-flex-grow="439" height="212" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2cuVUs.png" width="932"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;【注意】，要提前在root用户下对&lt;code&gt;/www/hadoop&lt;/code&gt;授予hadoop用户读写权限，否则无法启动&lt;/strong&gt;&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="696px" data-flex-grow="290" height="321" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2cuk67.png" width="931"&gt;&lt;/p&gt;&#10;&lt;p&gt;使用&lt;code&gt;jps&lt;/code&gt;查看当前的java进程，若出现如下四个进程表示HDFS服务启动成功&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="798px" data-flex-grow="332" height="79" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2cu2uN.png" width="263"&gt;&lt;/p&gt;&#10;&lt;h3 id="外部访问浏览器客户端"&gt;&lt;a href="#%e5%a4%96%e9%83%a8%e8%ae%bf%e9%97%ae%e6%b5%8f%e8%a7%88%e5%99%a8%e5%ae%a2%e6%88%b7%e7%ab%af" class="header-anchor"&gt;&lt;/a&gt;外部访问浏览器客户端&#10;&lt;/h3&gt;&lt;p&gt;首先使用宝塔开放50070端口&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="6699px" data-flex-grow="2791" height="35" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2cu1Ru.png" width="977"&gt;&lt;/p&gt;&#10;&lt;p&gt;使用外部浏览器访问ip:50070可查看如下页面，则表示HDFS已成功启动&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="315px" data-flex-grow="131" height="679" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2cuGgD.png" width="892"&gt;&lt;/p&gt;&#10;&lt;h2 id="hdfs命令"&gt;&lt;a href="#hdfs%e5%91%bd%e4%bb%a4" class="header-anchor"&gt;&lt;/a&gt;hdfs命令&#10;&lt;/h2&gt;&lt;h3 id="配置hdfs命令"&gt;&lt;a href="#%e9%85%8d%e7%bd%aehdfs%e5%91%bd%e4%bb%a4" class="header-anchor"&gt;&lt;/a&gt;配置hdfs命令&#10;&lt;/h3&gt;&lt;p&gt;使用&lt;code&gt;vi ~/.bash_profile&lt;/code&gt;进入配置文件，按如下配置&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;HADOOP_HOME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/www/hadoop/hadoop-2.6.0-cdh5.7.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$HADOOP_HOME&lt;/span&gt;/bin:&lt;span class="nv"&gt;$PATH&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;使配置文件生效&lt;code&gt;source ~/.bash_profile&lt;/code&gt;&#10;输入&lt;code&gt;hdfs&lt;/code&gt;回车测试命令是否生效，若出现如下画面则表示命令已经生效&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="414px" data-flex-grow="172" height="465" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2cumOa.png" width="803"&gt;&lt;/p&gt;&#10;&lt;h3 id="命令测试"&gt;&lt;a href="#%e5%91%bd%e4%bb%a4%e6%b5%8b%e8%af%95" class="header-anchor"&gt;&lt;/a&gt;命令测试&#10;&lt;/h3&gt;&lt;p&gt;先在本地创建&lt;code&gt;hello.txt&lt;/code&gt;文件，使用&lt;code&gt; hadoop fs -put hello.txt /&lt;/code&gt;命令将文件推送到hdfs根目录下&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="2287px" data-flex-grow="953" height="98" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2cur0i.png" width="934"&gt;&lt;/p&gt;&#10;&lt;p&gt;查看服务器根目录&lt;code&gt;hadoop fs -ls /&lt;/code&gt;，已经有该文件，hadoop伪分布式配置完成&#10;&lt;img alt="请输入图片描述" class="gallery-image" data-flex-basis="2271px" data-flex-grow="946" height="99" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/2cuHHv.png" width="937"&gt;&lt;/p&gt;&#10;</description></item></channel></rss>