Hadoop实践(安装篇)

参考文献
[1]http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-common/ClusterSetup.html
[2]http://www.linuxidc.com/Linux/2014-02/97076p7.htm
[3]http://www.cnblogs.com/skyme/archive/2011/10/26/2223984.html

第一步 :安装ubuntu

安装 VMware,生成ubuntu13.04虚拟机,hadoop1。

第二步:安装hadoop

(一) 安装和配置 java

(1) 安装
下载并保存 jdk-6u37-linux-x64.bin 或者 jdk-6u37-linux-i586.bin
运行 $sudo chmod 777 jdk-6u37-linux-x64.bin // 将文件赋于运行权限
运行 $ sudo -s ./jdk-6u37-l·inux-x64.bin //解压到当前目录
安装结束,安装目录就是当前目录。
(2)配置
输入命令: sudo gedit /etc/profile
输入密码,打开profile文件。
在文件最下面输入如下内容:
export JAVA_HOME=/usr/lib/jvm/jdk
export CLASSPATH=”.:$JAVA_HOME/lib:$CLASSPATH”
export PATH=”$JAVA_HOME/bin:$PATH”
这一步的意义是配置环境变量,使系统可以找到JDK。
接下来还需要手动将安装的JDK设置成系统默认的JDK。
运行 $ sudo update-alternatives –install /usr/bin/java java
运行/usr/lib/jvm/jdk1.7.0_21/bin/java 300
运行$ sudo update-alternatives –install /usr/bin/javac javac
运行/usr/lib/jvm/jdk1.7.0_21/bin/javac 300
运行$ sudo update-alternatives –config java
运行$ sudo update-alternatives –config javac
验证JDK是否安装成功
输入java -version,看到如下信息,就说明安装成功了:
java version “1.7.0_04”
Java(TM) SE Runtime Environment (build 1.7.0_04-b20)
Java HotSpot(TM) Server VM (build 23.0-b21, mixed mode)

(二)安装ssh

运行 sudo apt-get install openssh-server
报错:unable to fetch achieves …..
这是源的问题,需要换成国内的源,做法如下:
将/etc/apt/source.list 改成 可写模式 ( sudo chmod 777 source.list )
然后将下面的源粘贴到source.list文件中

deb http://mirrors.163.com/ubuntu/ precise main universe restricted multiverse
deb-src http://mirrors.163.com/ubuntu/ precise main universe restricted multiverse
deb http://mirrors.163.com/ubuntu/ precise-security universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ precise-security universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ precise-updates universe main multiverse restricted

deb http://mirrors.163.com/ubuntu/ precise-proposed universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ precise-proposed universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ precise-backports universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ precise-backports universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ precise-updates universe main multiverse restricted

注意,如果使用gedit编辑器,会遇到不能保存的问题,解决方法是在gedit中,选择菜单里的edit->preference->edittor,把create a backup copy 去掉打勾。

再执行 sudo apt-get install openssh-server
会报错 openssh-server : Depends: openssh-client (= 1:5.9p1-5ubuntu1.3)
解决方法是安装openssh-client (= 1:5.9p1-5ubuntu1.3),用以下命令:
sudo apt-get install openssh-client=1:5.9p1-5ubuntu1.3
安装完毕后,再运行sudo apt-get install openssh-server,就可以成功安装了。
测试方法 ssh localhost,可以登录到本机。

(三)安装远程备份工具rsync

sudo apt-get install rsync 一行搞定,有的系统已安装好。

(四)安装hadoop

下载 hadoop稳定版
解压 tar -zxvf hadoop-2.6.0.tar.gz
在 hadoop-2.6.0/etc/hadoop/hadoop-env.sh 中加入下面两行
export JAVA_HOME = /usr/java/jdk1.7.0_01

接下来进入hadoop的配置。
方式有三种,单机、单机伪分布式、集群。

单机方式

默认情况下,Hadoop被配置成以非分布式模式运行的一个独立Java进程。这对调试非常有帮助。

即,不需要做任何配置,hadoop默认是单机运行的一个Java进程,通过调用/bin/hadoop,可以执行。
举例:
$ mkdir input
$ cp etc/hadoop/.xml input
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar grep input output ‘dfs[a-z.]+’
$ cat output/

单机伪分布式

单机运行多个Java进程来模拟分布式计算。
配置方法:
配置etc/hadoop/core-site.xml:

<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadooptmp</value>
</property>
</configuration>
【注】hadoop.tmp.dir项可选(上述设置需手动创建hadooptmp文件夹)

配置etc/hadoop/hdfs-site.xml:

<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>

配置mapred-site.xml

$ mv mapred-site.xml.template mapred-site.xml //重命名
下面的几行写入mapred-site.xml中
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

配置yarn-site.xml

下面几行写入yarn-site.xml中
<property>
<name>yarn.nodemanager.aux-services</name>

     <value>mapreduce_shuffle</value>

</property>

配置ssh免密码登录

测试 $ ssh localhost
如果需要输入命令,则运行下面的命令:
ssh-keygen -t rsa
cd ~/.ssh
cp id_rsa.pub authorized_keys
再测试 $ ssh localhost,设置一下,应该就可以免密码登录了。

hadoop运行:

格式化hdfs
$ bin/hdfs namenode -format
打开编辑权限
$ chmod 777 /usr/hadoop-2.6.0
开启 NameNode daemon 和 DataNode daemon:
$ sbin/start-dfs.sh
通过浏览器检验是否开启了namenode
http://localhost:50070/
启动YARN,命令如下:
$ sbin/start-yarn.sh
通过浏览器检验是否开启了Yarn, http://localhost:8088
最后再用jps命令,检查正在运行的java进程,输出如下:

$ jps
7980 ResourceManager
7067 DataNode
8736 Jps
7321 SecondaryNameNode
6851 NameNode
8221 NodeManager

用wordcount对hadoop做测试

//新建hdfs的input文件夹,用于放置输入文件
$ bin/hadoop dfs -mkdir /input
//本地建立test文件夹,写好两个示范文档
$ mkdir test
$ echo “hello world bye world ” > file1
$ echo “hello hadoop bye hadoop ” > file2
将输入数据的文件夹:
$ bin/hadoop dfs -put ./test/** /input
执行程序:
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar wordcount /input /output
检查输出:
$ bin/hadoop dfs -get /output/* ./output
$ cat output/*
得到如下输出:
bye 2

hadoop 2
hello 2
world 2

注意
多次格式化hdfs会导致datanode无法启动,解决方法是:
进入hadoop.tmp.dir目录(core-site.xml设置的,这里是/home/hadoop/hadooptmp),找到dfs/name/current/VERSION,将其中的clusterID复制,粘贴到dfs/data/current/VERSION的clusterID中。

集群方式

安装没有区别,区别在配置。
只读文件有 core-default.xml, hdfs-default.xml, yarn-default.xml and mapred-default.xml. 不能修改。
可以修改的文件有 core-site.xml, hdfs-site.xml, yarn-site.xml , mapred-site.xml , hadoop-env.sh and yarn-env.sh 。
其中,hadoop-env.sh 和 yarn-env.sh 用来配置环境变量,例如 hadoop_opts 等,具体如何配置暂不深究。
其中,HADOOP_HEAPSIZE 是 每个守护进程占用的内存数量,默认是1GB,还可以给每个节点设置HEAPSIZE,此处不深究。
配置前需要明确
hadoop集群有三类节点,分别是 namenode,resourcemanager 和 datanode,还应该有一个secondarynamenode。
本次配置的节点有 namenode , resourcemanager , datanode1(含nodemanager) , datanode2(含nodemanager)。
需要做的配置有:

  1. JAVA_HOME (在yarn-env.sh 和 hadoop-env.sh 中都要配置)
  2. HADOOP_PID_DIR:Hadoop PID文件的存放目录,这个最好是修改一下,因为/tmp目录通常来说是任何人都可以访问的,有可能存在符合链接攻击的风险。(hadoop-env.sh 中)
    配置语句:export HADOOP_PID_DIR=/home/fenglibin/hadoop_tmp (目录必须存在)
  3. 配置core-site.xml:(namenode 和 datanode都一样)
    <property>
    <name>fs.defaultFS</name>
    <value>hdfs://namenode:9000</value> //指定namenode节点,namenode是主机名
    </property>
    core-site.xml其他配置参见:
    http://www.linuxidc.com/Linux/2015-01/111463.htm
    http://www.linuxidc.com/Linux/2014-02/97076p6.htm
  4. 配置conf/hdfs-site.xml (namenode节点)
    <property>
    <name>dfs.replication</name> //数据块保存的份数,一般为3
    <value>3</value>
    </property>
    <property>
    <name>dfs.namenode.name.dir</name> //namenode数据保存路径
    <value>file:/home/hduser/mydata/hdfs/namenode</value>
    </property>
    <property>
    <name>dfs.namenode.hosts</name> //datanode节点列表
    <value>datanode1,datanode2</value>
    </property>
    <property>
    <name>dfs.blocksize</name> //数据块大小 ,可以自定义
    <value>268435456</value>
    </property>
    <property>
    <name>dfs.namenode.handler.count</name> //namenode的RPC服务的线程数目
    <value>100</value>
    </property>

科普:RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务

  1. 配置conf/hdfs-site.xml (datanode节点)
    <property>
    <name>dfs.datanode.data.dir</name> //datanode数据保存路径
    <value>file:/home/hduser/mydata/hdfs/datanode</value>
    </property>

至此,有关hdfs的配置已经完成。

  1. 测试hdfs
    首先,在namenode上启动hdfs服务:
    $ $HADOOP_PREFIX/bin/hdfs namenode -format //格式化文件系统
    $ $HADOOP_PREFIX/sbin/hadoop-daemon.sh –config $HADOOP_CONF_DIR –script hdfs start namenode //启动namenode,此处–config $HADOOP_CONF_DIR应该可以省略
    以上两步都没有报错的话,web登录localhost:50070 应该可以看到如下画面:

《Hadoop实践(安装篇)》 hadoop-hdfs配置web页面.png

其次,在各datanode节点启动datanode的hdfs进程:
$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh –config $HADOOP_CONF_DIR –script hdfs start datanode //此处–config $HADOOP_CONF_DIR应该可以省略
启动后,回到namenode的web页面,点击datanodes,可以看到datanode1和datanode2。

《Hadoop实践(安装篇)》 hadoop-hdfs配置web页面.png

  1. 添加secondary namenode节点
    在namenode节点的hdfs-site.xml中添加:
    <property>
    <name>dfs.namenode.secondary.http-address</name> <value>secondarynamenode:50090</value>
    </property>
    新建一个节点(namenode的复制品),并将其ip与机器名的对应关系加入到hosts中。
    没找到单独启动secondary namenode的命令,测试方法是:在namenode上运行sbin/start-all.sh,从输出结果中看到secondary namenode的启动情况,并登录192.168.68.13:50090查看web页面。

[我遇到的问题]
1.core-site.xml中的hdfs namenode名称忘记修改了,解决:修改为namenode。
2.无法解析namenode,解决:在/etc/hosts中加入
192.168.68.11 namenode
192.168.68.12 resourcemanager
192.168.68.101 datanode1
192.168.68.102 datanode2
3.namenode的web页面无法连接datanode,解决:查看datanode的log,发现是clusterID在namenode和datanode上不一致导致的,原因是我在namenode上做了多次格式化操作,每做一次clusterID会变,但datanode不会更新。将namenode上的dfs/name路径下,找到current/version,将clusterID复制到datanode的data/current/version文件中即可。
========至此,hdfs的配置全部完成=========
========下面是YARN的配置=============

  1. 配置 yarn-site.xml
    有关ACL的配置,暂时不做,可以参考[1]。
    必须的配置如下:
    <property>
    <name>yarn.resourcemanager.address</name>
    <value>resourcemanager:8032</value>
    </property>
    <property>
    <name>yarn.resourcemanager.scheduler.address</name>
    <value>resourcemanager:8030</value>
    </property>
    <property>
    <name>yarn.resourcemanager.resource-tracker.address</name>
    <value>resourcemanager:8035</value>
    </property>
    <property>
    <name>yarn.resourcemanager.admin.address</name>
    <value>resourcemanager:8033</value>
    </property>
    <property>
    <name>yarn.resourcemanager.webapp.address</name>
    <value>resourcemanager:8088</value>
    </property>
    <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>

  2. 配置mapred-site.xml
    <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    </property>
    <property>
    <name>mapreduce.jobhistory.address</name>
    <value>resourcemanager:10020</value>
    </property>
    <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>resourcemanager:19888</value>
    </property>

  3. 配置slaves文件
    写入所有datanode节点的计算机名
    datanode1
    datanode2

  4. 测试yarn
    在RM节点的hadoop目录下运行 sbin/start-yarn.sh,即可启动yarn。
    在任意节点浏览器访问 resourcemanager:8088,可以看到yarn的web页面,说明启动成功,启动日志在logs/中可以查找。

[遇到的问题]
1.启动后,在RM节点用localhost:8088无法访问,在其他节点用192.168.68.12:8088无法访问,只能用resourcemanager:8088才能访问,原因可能是与etc/hosts的配置有关,但此问题不属于关键问题,没有理睬。
2.jobhistory节点理应单独设置,但此处在mapred-site.xml中配置在了resourcemanager中,实际部署时需要单独配置;jobhistory没有随yarn一起启动,需要在节点上用sbin/mr-jobhistory-daemon.sh start jobhistory 来启动,启动后通过resourcemanager:19888可以访问。

========YARN的配置结束啦啦=============

最后一步,是用一个简单的wordcount程序来验证一下hadoop平台是否工作正常。

  1. 在namenode节点 运行 sbin/hadoop-start.sh,用浏览器 namenode:50070验证
  2. 在resourcemanager节点运行 sbin/yarn-start.sh,用浏览器 resourcemanager:8088验证
  3. 在namenode节点执行wordcount示例程序,具体步骤如下:

(1)创建 input目录:[spark@S1PA11 hadoop-2.6.0]$ mkdir input
(2)在input创建f1、f2并写内容
[spark@S1PA11 hadoop-2.6.0]$ cat input/f1
Hello world bye jj
[spark@S1PA11 hadoop-2.6.0]$ cat input/f2
Hello Hadoop bye Hadoop
(3)在hdfs创建/tmp/input目录

[spark@S1PA11 hadoop-2.6.0]$ ./bin/hadoop fs -mkdir /tmp
15/01/05 16:53:57 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
[spark@S1PA11 hadoop-2.6.0]$ ./bin/hadoop fs -mkdir /tmp/input
15/01/05 16:54:16 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
(4)将f1、f2文件copy到hdfs /tmp/input目录
[spark@S1PA11 hadoop-2.6.0]$ ./bin/hadoop fs -put input/ /tmp
15/01/05 16:56:01 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
(5)查看hdfs上是否有f1、f2文件
[spark@S1PA11 hadoop-2.6.0]$ ./bin/hadoop fs -ls /tmp/input/
15/01/05 16:57:42 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
Found 2 items
-rw-r–r– 3 spark supergroup 20 2015-01-04 19:09 /tmp/input/f1
-rw-r–r– 3 spark supergroup 25 2015-01-04 19:09 /tmp/input/f2
(6)执行wordcount程序
[spark@S1PA11 hadoop-2.6.0]$ ./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar wordcount /tmp/input /output
(7)查看执行结果
[spark@S1PA11 hadoop-2.6.0]$ ./bin/hadoop fs -cat /output/*

最终会看到一个各个词汇出现次数的统计结果。

**当当当当! 大功告成! **

eclipse上写hadoop

第一步:
复制hadoop-2.6.0-eclipse-plugin.jar 到 eclipse安装目录/plugins/ 下
第二步:
重启eclipse,配置hadoop installation directory。
如果安装插件成功,打开Window–>Preferens,你会发现Hadoop Map/Reduce选项,在这个选项里你需要配置Hadoop installation directory,即hadoop的安装目录,配置完成后退出。
第三步:
配置Map/Reduce Locations。
在Window–>Show View中打开Map/Reduce Locations。
在Map/Reduce Locations中新建一个Hadoop Location。在这个View中,右键–>New Hadoop Location。在弹出的对话框中你需要配置Location name,如Hadoop,还有Map/Reduce Master和DFS Master。这里面的Host、Port分别为你在mapred-site.xml、core-site.xml中配置的地址及端口,单机伪分布式模式下,填localhost:9001和localhost:9000

    原文作者:小李哥的简书
    原文地址: https://www.jianshu.com/p/ee6ded5575de
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞