Ubuntu安装单机1.2.1hadoop与伪分布式模式进行WordCount实验

时间:2022-01-25 06:28:35

说明

配置单机的hadoop也有一些时间了,参考了许多的博客,也做了好多的尝试,最后终于成功了,这里写下自己配置过程中的步骤,只要按照这个步骤来应该是不会有问题的。如果有问题可以回帖提问,楼主这里已经解决了好多的遇到的问题。注:这里的大多数操作时按照michael-noll的博客来进行的。

这里使用的hadoop是1.2.1其它版本的hadoop于此类似。下面开始进行配置:

Step1: 创建hadoop的用户组和用户名

~$ sudo addgroup hadoop
~$ sudo adduser - -ingroup hadoop hadoop

至此创建了hadoop用户组和hadoop用户名,下面让hadoop用户具有管理员的权限,修改 /etc/sudoers

~$ sudo vim /etc/sudoers

在root  ALL=(ALL:ALL)  ALL下添加hadoop  ALL=(ALL:ALL)  ALL

下面切换到hadoop用户:

~$ su hadoop

Step2: 配置SSH

hadoop使用SSH进行通信,所以我们需要配置SSH,并且为了保证各节点在访问的过程中不需要手动输入密码,所以要配置SSH为无密码。

SSH无密码原理:master(namenode/jobtrack)作为客户端,要实现无密码公钥认证,连接到服务器slave(datanode/tasktracker)上时,需要在master上生成一个公钥对,包括一个公钥和一个私钥,而后将公钥复制到所有的slave上。当master通过SSH连接slave时,slave就会生成一个随机数并用master的公钥对随机数进行加密,并发送给master。Master收到密钥加密数之后再用私钥解密,并将解密数回传给slave,slave确认解密数无误后就允许master进行连接了。这就是一个公钥认证的过程,期间不需要用户手工输入密码。重要过程是将客户端master复制到slave上。

2.1 安装SSH

通过下面的命令安装ssh的服务器,一般客户端已经在ubuntu中安装过了。
hadoop@micaelpc:$ sudo apt-get install openssh-server
下面启动并测试是否安装成功: 出现如下表示安装成功,然后进行无密码的SSH的配置,因为博客截图上传图片不方便所以在一起截了。 Ubuntu安装单机1.2.1hadoop与伪分布式模式进行WordCount实验
至此完成了无密码的SSH配置。 需要说明的是,在
  1. hadoop@michaelpc:~$ ssh-keygen -t rsa -P ""  
的时候会将公钥和密钥保存在 ~/.ssh/下面。

Step3 :配置JDK

3.1 安装jdk

之所以配置jdk是因为hadoop后面的运行要用到java环境,ubuntu是自带jdk的。但是这里我自己又下载了jdk并将它安装在了/usr/java/ 目录下。

在将jdk拷贝到相应的目录下之后用下面的命令进行解压

hadoop@michaelpc:/usr/java$ ./jdk-6u45-linux-i586.bin 

3.2 配置环境变量

java的环境变量可以在~/.bashrc中添加,也可以在~/.profile中添加,这其中的区别可以到网上去搜,这里我们是在~/.profile 中添加:

hadoop@michaelpc:/usr/java$ vim ~/.profile
在后面添加:
PATH=$PATH:$HOME/bin
export JAVA_HOME=/usr/java/jdk1.6.0_45
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
export CLASSPATH=$JAVA_HOME/lib:.
保存退出;然后查看效果
hadoop@michaelpc:/usr/java$ source ~/.profile
hadoop@michaelpc:/usr/java$ java -version
java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) Client VM (build 20.45-b01, mixed mode, sharing)

Step4 :配置hadoop

4.1 下载安装hadoop

这里选的hadoop的版本是:1.2.1下载地址是:http://mirrors.cnnic.cn/apache/hadoop/common/hadoop-1.2.1/ 选择hadoop-1.2.1-tar.gz进行下载。

  1. hadoop@michaelnju:/usr/local$ sudo tar xzf hadoop-1.1.2.tar.gz (注意,我已将hadoop-1.1.2.tar.gz拷贝到usr/local/hadoop,然后转到hadoop用户上)  
  2. 下面是重命名hadoop-1.2.1为haoop,为了之后添加路径方便
  3. hadoop@michaelnju:/usr/local$ sudo mv hadoop-1.1.2 /usr/local/hadoop  
要确保所有的操作都是在用户hadoop下完成的,所以将该hadoop文件夹的属主用户设为hadoop

  1. hadoop@derekUbun:/usr/local$ sudo chown -R hadoop:hadoop hadoop  

4.2 配置hadoop

4.2.1 首先是配置 /usr/local/hadoop/conf/hadoop-env.sh 

hadoop@michaelpc:/usr/local/hadoop$ vim conf/hadoop-env.sh 
在# The java implementation to use.  Required.下面加入:
 export JAVA_HOME=/usr/java/jdk1.6.0_45
 export HADOOP_INSTALL=/usr/local/hadoop
 export PATH=$PATH:/usr/local/hadoop/bin
保存退出后运行:
hadoop@michaelpc:/usr/local/hadoop$ source conf/hadoop-env.sh
让配置生效,之后运行:
hadoop@michaelpc:/usr/local/hadoop$ hadoop version
如果出现下面,表示hadoop配置成功。
Warning: $HADOOP_HOME is deprecated.

Hadoop 1.2.1
Subversion https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.2 -r 1503152
Compiled by mattf on Mon Jul 22 15:23:09 PDT 2013
From source with checksum 6923c86528809c4e7e6f493b6b413a9a
This command was run using /usr/local/hadoop/hadoop-core-1.2.1.jar

至此我们完成了单机hadoop的创建。

下面我们来进行单击的测试,我在hadoop下创建了一个test_in/file1.txt和file2.txt

hadoop@michaelpc:/usr/local/hadoop/test_in$ ll
总用量 16
drwxr-xr-x 2 hadoop hadoop 4096 4月 10 19:52 ./
drwxr-xr-x 19 hadoop hadoop 4096 4月 10 19:50 ../
-rw-r--r-- 1 root root 54 4月 10 19:52 file1.txt
-rw-r--r-- 1 root root 51 4月 10 19:52 file2.txt
之后用下面命令来执行,先是拷贝文件到hdfs然后再执行wordcout,然后在再查看结果

hadoop@michaelpc:/usr/local/hadoop$ hadoop dfs -copyFromLocal ./test_in test_in

hadoop@michaelpc:/usr/local/hadoop$ bin/hadoop jar hadoop-examples-1.2.1.jar wordcount test_in test_out
这里的test_in 和test_out都是hdfs文件系统,不能事先创建。
hadoop@michaelpc:/usr/local/hadoop$ hadoop dfs -cat test_out/*
Warning: $HADOOP_HOME is deprecated.

good 2
hadoop 4
hahh 2
hello 4
is 2
michael 1
michel 1
world 2


下面的配置用来完成伪分布式的配置:

4.2.2 禁用IPV6

因为之前在配置的过程中,启动时还有问题,最后是将IPV6手动关闭并重启之后才成功的,如果所在网络没有一IPV6,不需要设置,关闭的方式是进行如下编辑:

$ vim  /etc/sysctl.conf
#disable ipv6后添加
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
然后重启电脑,查看
$ cat /proc/sys/net/ipv6/conf/all/disable_ipv6
如果是1,表示已经关闭。

4.2.3 配置 conf/core-site.xml

core-site.xml是Hadoop Core的配置项,例如HDFS和MapReduce常用的I/O设置等。注意如果是hadoop2.2.X等版本的话,这些配置文件的路径是不一样的,可自己到网上去搜索路径。

因为之前配置的时候创建的目录是在Hadoop/tmp/文件下,导致最后运行hadoop的时候找不到namenode.进入logs/文件查看发现是当前目录是inconsistent的,所以就将目录建在/app/Hadoop/tmp下。

在配置core-site.xml的时候需要先创建目录:

$ sudo mkdir -p /app/hadoop/tmp
$ sudo chown hadoop:hadoop /app/hadoop/tmp
#and if you want to tighten up security, chmod from 755 to 750...
$ sudo chmod 750 /app/hadoop/tmp

之后是:

hadoop@michaelpc:/usr/local/hadoop$ vim conf/core-site.xml
#将<configutation></configuration>之间修改为
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/app/hadoop/tmp</value>
</property>
保存退出

4.2.4 配置 conf/mapred-site.xml

mapred-site.xml: MapReduce 守护进程的配置项,包括jobtracker和tasktracker。下面依次介绍配置过程。

hadoop@michaelpc:/usr/local/hadoop$ vim conf/mapred-site.xml
<property
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>


4.2.5 配置 conf/hdfs-site.xml

hdfs-site.xml:Hadoop 守护进程的配置项,包括namenode,辅助namenode和datanode等。

hadoop@michaelpc:/usr/local/hadoop$ vim conf/hdfs-site.xml
        <property>            <name>dfs.replication</name>            <value>2</value>        </property>

4.3 运行hadoop

下面我们来启动hadoop。

首先是进行namenode的初始化工作:

hadoop@michaelpc:/usr/local/hadoop$ bin/hadoop namenode -format
Warning: $HADOOP_HOME is deprecated.

14/04/10 12:43:59 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = michaelpc/127.0.1.1
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 1.2.1
STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.2 -r 1503152; compiled by 'mattf' on Mon Jul 22 15:23:09 PDT 2013
STARTUP_MSG: java = 1.6.0_45
************************************************************

之后是运行hadoop:

hadoop@michaelpc:/usr/local/hadoop$ bin/start-all.sh 
Warning: $HADOOP_HOME is deprecated.

starting namenode, logging to /usr/local/hadoop/libexec/../logs/hadoop-hadoop-namenode-michaelpc.out
localhost: starting datanode, logging to /usr/local/hadoop/libexec/../logs/hadoop-hadoop-datanode-michaelpc.out
localhost: starting secondarynamenode, logging to /usr/local/hadoop/libexec/../logs/hadoop-hadoop-secondarynamenode-michaelpc.out
starting jobtracker, logging to /usr/local/hadoop/libexec/../logs/hadoop-hadoop-jobtracker-michaelpc.out
localhost: starting tasktracker, logging to /usr/local/hadoop/libexec/../logs/hadoop-hadoop-tasktracker-michaelpc.out
注意只有下面的六个进程均运行才表示运行成功
hadoop@michaelpc:/usr/local/hadoop$ jps
4490 DataNode
4858 TaskTracker
4345 NameNode
4634 SecondaryNameNode
4923 Jps
4716 JobTracker

到此我们完成了伪分布式的搭建。下面可以在网页上查看节点运行的信息等。

如下图:

Ubuntu安装单机1.2.1hadoop与伪分布式模式进行WordCount实验

Step5 :运行WordCount事例程序

5.1 运行程序

实验所用的数据是从国外一个免费的电子书下载网站上下载的三个文档,分别是pg20417.txt等等。保存在/tmp/gutenberg上。下面是下载的链接:

我们下载的是Plain Text UTF-8的形式,保存在/tmp/test_in/目录下,也可以将多个的文件放在这个下面。

//现将文件通过下面的命令拷贝到hadoop的文件系统hdfs中

hadoop@michaelpc:/usr/local/hadoop/bin$ hadoop dfs -copyFromLocal /tmp/test_in  /user/hadoop/test_file

//下面查看一下文件:

hadoop@michaelpc:/usr/local/hadoop/bin$ hadoop dfs -ls /user/hadoop/
Warning: $HADOOP_HOME is deprecated.

Found 1 items
drwxr-xr-x - hadoop supergroup 0 2014-04-10 19:15 /user/hadoop/test_file

//通过下面的语句进行运行,注意 wordcoutn file1path file2path 的语法。其中file2path是事先不存在的。

hadoop@michaelpc:/usr/local/hadoop$ bin/hadoop jar hadoop-examples-1.2.1.jar wordcount /user/hadoop/test_file /user/hadoop/out_file

这个时候可以去查看网页上的状态。

5.2 查看程序的运行状态

首先看一下是否产生输出文件:

hadoop@michaelpc:/usr/local/hadoop$ hadoop dfs -ls /user/hadoop/
Warning: $HADOOP_HOME is deprecated.

Found 2 items
drwxr-xr-x - hadoop supergroup 0 2014-04-10 19:22 /user/hadoop/out_file
drwxr-xr-x - hadoop supergroup 0 2014-04-10 19:15 /user/hadoop/test_file
再查看一下结果:

hadoop@michaelpc:/usr/local/hadoop$ hadoop dfs -cat /user/hadoop/out_file/*
这时候你发现被刷屏了,这时候可以拷贝hdfs文件到常规文件中用head命令查看
hadoop@michaelpc:/usr/local/hadoop$ bin/hadoop dfs -getmerge /user/hadoop/out_file /tmp/out_fileWarning: $HADOOP_HOME is deprecated.14/04/10 19:46:53 INFO util.NativeCodeLoader: Loaded the native-hadoop libraryhadoop@michaelpc:/usr/local/hadoop$ ll /tmp/out_file-rwxrwxrwx 1 hadoop hadoop 55  4月 10 19:46 /tmp/out_file*hadoop@michaelpc:/usr/local/hadoop$ head /tmp/out_file-copyFromLocal    1dfs    2hadoop    1hdfs    1hello    1world    1

至此已经完成了所有操作,如果读者在配置过程中有任何问题都可以回帖询问。