本文以Ubuntu操作系统为例,介绍基于Aliyun OSS的hadoop-3.0.0-beta1的集群环境搭建过程,示例的集群环境包括1个master和2个slave节点(slave1和slave2)。
注意:为了方便用户操作,减少错误发生,本文假定所有操作都是使用<code>root</code>账户;
如果使用非<code>root</code>,请根据自己的实际情况进行操作步骤的修订。
所有下载软件包的存放和操作目录为:<code>/home/hadoop</code>
Java安装目录($JAVA_HOME)为:<code>/home/hadoop/jdk1.8.0/</code>
Hadoop安装目录($HADOOP_HOME)为:<code>/home/hadoop/hadoop-3.0.0-beta1/</code>
在master节点上执行命令修改hostname: <code>hostname master</code>
在slave1节点上执行命令修改hostname: <code>hostname slave1</code>
在slave2节点上执行命令修改hostname: <code>hostname slave2</code>
在master节点上执行命令 <code>hostname</code> 返回 master。
在slave1节点上执行命令 <code>hostname</code> 返回 slave1。
在slave2节点上执行命令 <code>hostname</code> 返回 slave2。
在各个节点上打开文件:<code>vim /etc/hosts</code>
在文件最后添加如下内容,注意下面的IP地址要替换为<code>实际环境的局域网IP地址</code>:
在master节点上执行命令 <code>ping slave1</code> 和 <code>ping slave2</code>,均正常ping通。
在slave1节点上执行命令 <code>ping master</code> 和 <code>ping slave2</code>,均正常ping通。
在slave2节点上执行命令 <code>ping master</code> 和 <code>ping slave1</code>,均正常ping通。
解压JDK <code>tar -xzvf jdk-8u144-linux-x64.tar.gz</code>
更改文件夹的名称:<code>mv /home/hadoop/jdk1.8.0_144 /home/hadoop/jdk1.8.0</code>,确保Java放置在<code>/home/hadoop/jdk1.8.0</code>这个固定目录中,方便下文操作。
打开文件 <code>vim /etc/profile</code>
在文件末尾添加如下内容:
使配置生效 : <code>source /etc/profile</code>
验证配置是否生效 :
执行命令<code>java -version</code>,返回正确版本。
执行命令<code>which java</code>,返回正确结果:<code>/home/hadoop/jdk1.8.0/bin/java</code>。
查看是否已经安装SSH : <code>ps -e | grep ssh</code>
如果没有安装ssh,则执行该命令进行安装 : <code>apt-get install openssh-server</code>
验证ssh是否安装成功 :
在master节点进入<code>~/.ssh/</code>目录并生成公钥,并将<code>id_rsa.pub</code>内容复制到所有节点的<code>authorized_keys</code>文件中。
注意:若某个节点没有<code>~/.ssh/</code>目录,请先执行一次<code>ssh localhost</code>。执行<code>ssh-keygen</code>命令时遇到提示信息,如果要求输入<code>y或yes</code>的则输入<code>y或yes</code>,其他的提示可以默认敲<code>回车</code>。
在master节点执行如下命令,不再提示输入密码,说明SSH配置OK了。
在master节点进入操作目录: <code>cd /home/hadoop/</code>
下载 <code>wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-3.0.0-beta1/hadoop-3.0.0-beta1.tar.gz</code>
解压 <code>tar -xzvf hadoop-3.0.0-beta1.tar.gz</code>
验证 <code>ls /home/hadoop/hadoop-3.0.0-beta1</code>,返回Hadoop目录的文件列表。
在master节点打开文件: <code>vim /etc/profile</code>
在文件末尾添加如下内容;注意:如果已经存在重复的export变量内容,则将原来的删掉:
使配置生效: <code>source /etc/profile</code>
验证配置是否生效:
执行命令<code>echo $JAVA_HOME</code>,返回<code>/home/hadoop/jdk1.8.0/</code>;
执行命令<code>echo $HADOOP_HOME</code>,返回<code>/home/hadoop/hadoop-3.0.0-beta1</code>;
执行命令<code>echo $HDFS_NAMENODE_USER</code>,返回<code>root</code>;
打开文件: <code>vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh</code>;
在文件相应位置增加如下内容,请替换为真实的JAVA_HOME的值:
执行如下两条命令,返回的结果内容应该是统一的,都包含<code>/home/hadoop/jdk1.8.0/</code>:
打开文件: <code>vim $HADOOP_HOME/etc/hadoop/core-site.xml</code>
在<code>configuration</code>标签中添加:
打开文件: <code>vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml</code>
打开文件: <code>vim $HADOOP_HOME/etc/hadoop/workers</code>
删除所有文件内容,根据实际节点情况,修改内容为:
打开文件: <code>vim $HADOOP_HOME/etc/hadoop/mapred-site.xml</code>
打开文件: <code>vim $HADOOP_HOME/etc/hadoop/yarn-site.xml</code>
前面章节已经在各个slave节点上创建hadoop工作目录:<code>/home/hadoop</code>;请登录各个slave节点,执行如下命令,确保<code>/home/hadoop</code>是一个<code>存在的空目录</code>:
前面章节已经配置好master节点可以无密码SSH登录到各个slave节点,在master节点上执行如下命令,将Hadoop文件夹复制到各个slave节点:
在master节点,进入hadoop主目录,格式化hdfs :
在master节点,进入hadoop主目录,启动dfs :
执行如下命令,在hdfs上创建文件夹<code>my-test-dir</code>然后显示和删除该文件夹,均能够返回预期结果:
能够正确报告文件系统的基本信息和统计信息。
然后分别执行如下两条命令,如果能够返回相同的统计结果, 则说明Hadoop多机环境下已经成功运行<code>wordcount</code>:
<code>$HADOOP_HOME/bin/hadoop fs -cat /output/part-r-00000 | grep hadoop | wc -l</code>
<code>grep hadoop $HADOOP_HOME/README.txt | wc -l</code>
安装好Hadoop并且调试验证环境之后,可以配置AliyunOSS数据源。
在目录<code>$HADOOP_HOME/share/hadoop/tools/lib</code>下有如下jar包:
打开文件: <code>vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh</code>
在相应位置增加如下内容:
执行如下命令,能够返回刚刚增加的文件内容:
<code>grep HADOOP_OPTIONAL_TOOLS $HADOOP_HOME/etc/hadoop/hadoop-env.sh | grep -v '#'</code>
打开文件: <code>vim $HADOOP_HOME/etc/hadoop/core-site.xml</code>
在<code>configuration</code>标签中加入如下内容:
<code>注意把fs.oss.endpoint、fs.oss.accessKeyId、fs.oss.accessKeySecret属性对应的<value>的值设置为自己的具体内容。</code>
然后分别执行如下两条命令,如果能够返回相同的统计结果, 则说明基于OSS的Hadoop多机环境下已经成功运行<code>wordcount</code>:
<code>$HADOOP_HOME/bin/hadoop fs -cat oss://bucket-hadoop/output/part-r-00000 | grep hadoop | wc -l</code>
<code>$HADOOP_HOME/bin/hadoop fs -cat oss://bucket-hadoop/input/README.txt | grep hadoop | wc -l</code>
至此,基于Aliyun OSS的Hadoop多机环境已经搭建成功。