天天看点

基于OSS存储搭建Hadoop集群

本文以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属性对应的&lt;value&gt;的值设置为自己的具体内容。</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多机环境已经搭建成功。