hadoop2.6.0分布式配置

hadoop2.6.0集群搭建-ubuntu14.04

1 物理条件准备

1.1 集群准备

两台机器,虚拟机实体机都可以。只要两者可以连通。

1.2 系统准备

这里及以下代码使用的系统为ubuntu14.04桌面版64位。只要是linux系统,基本上配置都是差不多的。

然后一个命名为master另外一个命名为slave
然后在/etc/hosts中设置两个节点的ip和别名。

1
xxx.xxx.xxx.xxx master
xxx.xxx.xxx.xxx slave

2 基础环境配置

2.1 java安装

在ubuntu下其实已经可以采用ppa来安装了。当然,也可以直接解压安装。在这里只说明ppa安装的方法吧。

1
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install Oracle-java7-installer

上述步骤分别为添加oracle-java的源、更新缓存和安装jdk7。

如果想要安装jdk8的话,可以将Oracle-java7-installer换成Oracle-java8-installer

如果同时拥有两个版本,可以通过sudo update-java-alternatives -s java-7-oracle进行切换。

2.2 openssh安装

ubuntu14.04桌面版中自带openssh-client但是没有openssh-server
所以要安装openssh-server.

1
sudo apt-get install openssh-server

2.3 建立双向免密码通讯

通过命令ssh-keygen -t rsa所有内容为空一直摁回车,然后再~/.ssh文件夹中在生成公钥id_rsa.pubid_rsa.pub私钥。

然后将自己的公钥分发到其他节点然后执行cat id_rsa.pub >> ~/.ssh/authorized_keys

所有节点都这样执行一遍,即可完成免密码通讯。

3 hadoop环境搭建

首先在apache官网下载hadoop2.6.0.地址如下:

http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.6.0/hadoop-2.6.0.tar.gz

然后将下载好的压缩包解压到某一个文件夹。在一下的例子中我解压到了/usr/local/bigdata下,并且将文件夹改名为hadoop.
结构树如下:

  • /
  • -—usr
  • -——-local
  • -———–bigdata
  • -—————hadoop
  • -——————-bin
  • -——————-sbin
  • -——————-etc
  • -——————-libexec
  • -——————-include
  • -——————-lib
  • -——————-LICENSE.txt
  • -——————-……..

所以hadoop的根目录为/usr/local/bigdata/hadoop

3.1 将环境变量加入.bashrc

打开主目录下的.bashrc,然后再里面加入:

1
#hadoop
export HADOOP_HOME=/usr/local/bigdata/hadoop
export PATH=$HADOOP_HOME/bin:$PATH
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"

3.2 修改hadooop中的配置文件

需要修改的配置文件有下面几个

  • /hadoop/etc/hadoop/hadoop-env.sh
  • /hadoop/etc/hadoop/yarn-env.sh
  • /hadoop/etc/hadoop/slaves
  • /hadoop/etc/hadoop/core-site.xml
  • /hadoop/etc/hadoop/hdfs-site.xml
  • /hadoop/etc/hadoop/mapred-site.xml
  • /hadoop/etc/hadoop/yarn-site.xml

3.2.1 hadoop-env.sh

修改java路径

1
2
# The java implementation to use.
export JAVA_HOME=/usr/lib/jvm/java-7-oracle

3.2.2 yarn-env.sh

也是修改java路径,同时把注释去掉

1
2
# some Java parameters
export JAVA_HOME=/usr/lib/jvm/java-7-oracle/

3.2.3 slaves

增加slave节点的别名,这里就是slave

3.2.4 core-site.xml

增加如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/bigdata/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.proxyuser.spark.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.spark.groups</name>
<value>*</value>
</property>
</configuration>

3.2.5 hdfs-site.xml

增加如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/bigdata/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/bigdata/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>

3.2.6 mapred-site.xml

开始是没有这个文件的,需要复制mapred-site.xml.template一份,然后改名为mapred-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>

3.2.7 yarn-site.xml

在文件中增加如下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8035</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
</configuration>

至此,配置文件已经修改完毕,然后可以将整个hadoop文件夹分发到其他机器。
因为已经建立了ssh双向连接,所以可以直接使用scp命令。

1
scp -r /usr/local/bigdata/hadoop {your_username}@{your_pc_name}:/usr/local/bigdata

3.3 格式化hdfs

hadoop根目录下执行:

1
bin/hdfs namenode -format

3.4 启动hadoop

hadoop根目录下执行:

1
sbin/start-all.sh

便可以在http://master:50070查看到集群信息了。

4 hello world

hadoop下,wordcount就是他的hello world
首先在hadoop的根目录下新建一个文件夹,然后在文件夹中随便复制进去一个文本。

1
mkdir input
cat "xxxxxx" >> input/file

4.1 在hdfs上新建文件夹

1
bin/hadoop fs -mkdir /hhu
bin/hadoop fs -mkdir /hhu/input

4.2 将文本放到hdfs中

1
bin/hadoop fs -put input/ /hhu

4.3 执行wordcount

1
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar wordcount /hhu/input/ /output/wordcount1

如果执行成功基本就完成了,注意如果日志中出现job_local[\d]*的字样,说明还是在本机执行,那就要查看自己的配置哪里没配好了。