Hadoop2.6.4搭建笔记

自己搭建一个Hadoop集群,小型的。我在台式机上新建了3台虚拟机,一台用于Master,两台用于Slave。系统用的Ubuntu14.04.系统准备好之后。

一、在UBuntu下创建hadoop用户和用户组

1. 首先新建hadoop用户组

sudo addgroup hadoop


2. 创建hadoop用户

sudo adduser -ingroup hadoop hadoop


3. 给hadoop用户添加权限,打开/etc/sudoers文件。

sudo vim /etc/sudoers
按下回车,打开/etc/sudoers文件,给hadoop用户赋予与root用户同样的权限。在root    ALL=(ALL:ALL) ALL下添加hadoop  ALL=(ALL:ALL) ALL。


二、安装JDK

这里不写了

三、 修改机器名字

每当ubuntu安装成功时,我们的及其名字都是默认:ubuntu,但是为了以后集群中能够容易分辨各台服务器,需要给每台机器取一个不同的名字。机器名字由/etc/hostname文件决定。

1. 打开/etc/hostname

sudo vim /etc/hostname

由于有3台机器,我们分别把机器名字修改为Master_00,Slave_00,Slave_01.

重启系统后才会生效。

四、安装ssh服务

1. 安装openssh_server

sudo apt-get install openssh-server

五、 建立ssh无密码登录本机

ssh生成密钥有rsa和dsa两种生成方式,默认情况下采用rsa方式。

1、 创建ssh-key,这里我们采用rsa方式,如图

首先把用户切换到hadoop用户下。

ssh-keygen -t rsa -P ""

回车后,会在当前用户目录下~/.ssh/下生成两个文件:id_rsa和id_rsa.pub这两个文件是成对出现的

2、进入~/.ssh/目录下,将id_rsa.pub追加到authorized_keys授权文件中,开始是没有authorized_keys授权文件的。

cat id_rsa.pub >> authorized_keys


(完成后就可以无密码登录本机了)

3、登录localhost试试

ssh localhost

第一次登录的时候需要输入yes.(注:当ssh远程登录到其他机器后,现在你控制的是远程的机器,需要执行退出命令才能重新控制本机器)

4. 执行退出命令

exit


5. 由于我有3台虚拟机,一个作为master,两台作为slave,master需要免密登录slave,所以需要把master生成的公钥复制到两台slave中,

scp id_rsa.pub hadoop@Slave_01:/home/hadoop/

期间可能需要输入密码,然后在slave机器上,把id_rsa.pub文件追加到authorized_keys授权文件

cat ../id_rsa.pub >> ./authorized_keys

这样,master就可以免密登录slave了,你可以尝试以下。

小结: 登录的机子需要有私钥,被登录的机子需要登录机子的公钥.


六、 安装hadoop

我们采用的hadoop版本是:hadoop2.7.2 .

网址是:http://www-us.apache.org/dist/hadoop/common/

1. 假设hadoop在桌面,将它复制到目录下/usr/local下。

sudo cp ~/hadoop-2.6.4.tar.gz ./
2. 解压hadoop-2.6.4.tar.gz

sudo tar zxvf hadoop-2.6.4.tar.gz
3. 将解压出来的文件夹改名为hadoop


4. 将该hadoop文件夹的属主用户设为hadoop,如下图

sudo chown -R hadoop:hadoop hadoop

5.打开hadoop/etc/hadoop/hadoop-env.sh文件。

vim hadoop-env.sh
6. 配置hadoop-env.sh(找打#export JAVA_HOME=……,去掉#。然后加上本机jdk路劲)


Hadoop单机模式

hadoop默认模式为非分布式,无须进行其他配置即可运行。非分布式的hadoop既单java进程,方便进行调试。现在已经配置完成了,现在我们可以执行例子来感受一下hadoop的运行。hadoop附带了很多例子(运行./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.4.jar可以看到所有例子)。包括wordcount、terasort、join、grep等。


在此,我们选择运行grep例子,我们将input文件夹中的所有文件作为输入,筛选当中符合正则表达式dfs[a-z.]+的单词并统计出现的次数,最后输出结果到out文件夹中。

cd /usr/local/hadoop
mkdir ./input
cp ./etc/hadoop/*.xml ./input/
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.4.jar grep ./input ./output 'dfs[a-z.]+'
cat ./output/*
执行结束后,输出了作业的相关信息,输出结果是符合正则的单词dfsadmin出现了一次


注意:hadoop默认不会覆盖结果文件,因此在此运行上面的实例会提示出错,需要先将./output删除。

rm -rf ./output

Hadoop伪分布式配置

Hadoop可以在单节点上以伪分布式的方式运行,Hadoop进程以分离的Java进程来运行。节点既作为Nameode也作为Datanode,同时,读取的是HDFS中的文件。

Hadoop的配置文件位于/usr/local/hadoop/etc/hadoop/中,伪分布式需要修改2和配置文件core-site.xml和hdfs-site.xml。Hadoop的配置文件是xml格式,每个配置以声明property的name和value的方式来实现。

修改配置文件core-site.xml。将当中的

<configuration>
</configuration>

修改为以下配置:

<configuration>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>file:/usr/local/hadoop/tmp</value>
                <description>Abase for other temporary directories.</description>
        </property>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://localhost:9000</value>
        </property>
</configuration>
配置文件hdfs-site.xml修改为:

<configuration>
        <property>
                <name>dfs.replication</name>
                <value>1</value>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:/usr/local/hadoop/tmp/dfs/</span>name</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:/usr/local/hadoop/tmp/dfs/data</value>
        </property>
</configuration>


配置完成后,执行namenode格式化

./bin/hdfs namenode -format

出现Storage directory /usr/local/hadoop/tmp/dfs/name has been successfully formatted和Exiting with status 0 说明成功。

接着开启NameNode和DataNode守护进程。

./sbin/start-dfs.sh

启动完成后,可以通过命令jps来判断是否成功启动,若成功启动则会列出如下进程:NameNode、DataNode和SecondaryNode。(如果SecondaryNode没有启动,请运行sbin/stop-dfs.sh关闭进程,然后再次尝试,如果NameNode和DataNode没有启动,请仔细检查之前的步骤)

hadoop@Master_00:/usr/local/hadoop$ jps

成功启动后,可以访问Web界面http://localhost:50070来查看Hadoop的信息。由于我的Hadoop部署在一台虚拟机上,所以我的访问地址是http://92.168.76.130:50070

Hadoop伪分布式实例-WordCount

上面的单机模式,WordCount读取的是本地数据,伪分布式读取的是HDFS上的数据.要使用HDFS,首先需要创建用户目录

./bin/hdfs dfs -mkdir -p /usr/local/hadoop/input
-p表示如果会逐级新建目录.

接着将/etc/hadoop中的文件作为输入文件复制到分布式文件系统中,即将/usr/local/hadoop/etc/hadoop中的xml文件复制到分布式文件系统中的/usr/local/hadoop/input中.上一步已经新建好了文件夹.

./bin/hdfs dfs -put ./etc/hadoop/*.xml input
复制完成后,可以通过如下命令查看文件列表:

./bin/hdfs dfs -ls input

伪分布式运行MapReduce作业的方式跟单机模式相同,区别在于伪分布式读取的是DHFS中的文件(可以将单机步骤中创建的本地input文件夹删掉来验证这一点).

 ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.4.jar grep input output 'dfs[a-z.]+'

出现如上图结果.然后查看运行结果命令(查看的是位于HDFS中的输出结果)

./bin/hdfs dfs -cat output/*

Hadoop运行程序时,默认输出目录不能存在,因此再次运行需要执行如下命令删除output文件夹:

./bin/hdfs dfs -rm -r output

删除output文件夹.

伪分布式的文件是以HDFS的格式存储在本机上,但是具体存储位置是哪,存储格式是啥.现在还不知道,这部分以后有待补充,to be continued......


完全分布式搭建

以上Hadoop搭建是单机模式和伪分布式模式,下面介绍完全分布式搭建.前面我们的虚拟机有3个,分别是Master和两个slave.

主要涉及的配置文件有7个:都在/usr/local/hadoop/etc/hadoop文件夹下

hadoop-env.sh
yarn-env.sh
slaves
core-site.xml
hdfs-site.xml
mapred-site.xml.template
yarn-site.xml


1. 配置core-site.xml

<configuration>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>file:/usr/local/hadoop/tmp</value>
                <description>Abase for other temporary directories.</description>
        </property>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://Master00:9000</value>
        </property>
</configuration>



fs.defaultFS是NameNode的URI.hdfs://主机名:端口/

hadoop.tmp.dir:Hadoop的默认临时路径,这个最好配置,如果在新增节点或者其他情况下莫名其妙的DataNode启动不了,就删除此文件中的tmp目录即可.不过如果删除了NameNode机器的此目录,那么就需要重新执行NameNode格式化的命令.

2. 配置mapred-site.xml

<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.address</name>
                <value>Master00:10020</value>
        </property>
        <property>
               <name>mapreduce.jobhistory.webapp.address</name>
               <value>Master00:19888</value>
       </property>
</configuration>


mapred.job.tracker是JobTracker的主机(或者IP)和端口.主机:端口.其中/usr/local/hadoop/tmp目录需要提前创建,并且注意用chown -R 命令来修改目录权限
3. 配置hdfs-site.xml

<configuration>
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>Master00:50090</value>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>2</value>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:/usr/local/hadoop/dfs/name</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:/usr/local/hadoop/dfs/data</value>
        </property>



</configuration>




dfs.name.dir是NameNode持久存储名字空间及事务日志的本地文件系统路径.当这个值是一个逗号分割的目录列表时,nametable数据将会复制到所有目录中作冗余备份.

dfs.replication是数据需要备份的数量,默认是3,如果此数大于集群的机器数会出错.

此处的name和data等目录不能提前创建,如果提前创建会出问题.

4. 配置master和slaves主从节点

vim masters
修改为

Master00

vim slaves

修改为

Slave00
Slave01

5. 配置 yarn-site.xml

<configuration>

<!-- Site specific YARN configuration properties -->
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>Master00</value>
        </property>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>

</configuration>

然后在每台机器上执行格式化

hdfs namenode -format
然后

./sbin/start-all.sh 

启动服务.

通过命令 jps 可以查看各个节点所启动的进程。正确的话,在 Master 节点上可以看到 NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer 进程


在 Slave 节点可以看到 DataNode 和 NodeManager 进程



缺少任一进程都表示出错。另外还需要在 Master 节点上通过命令 

hdfs dfsadmin -report 

查看 DataNode 是否正常启动,如果 Live datanodes 不为 0 ,则说明集群启动成功


也可以通过 Web 页面看到查看 DataNode 和 NameNode 的状态:http://Master00:50070/。如果不成功,可以通过启动日志排查原因。


伪分布式、分布式配置切换时的注意事项

1. 从分布式切换到伪分布式时,不要忘记修改 slaves 配置文件;
2. 在两者之间切换时,若遇到无法正常启动的情况,可以删除所涉及节点的临时文件夹,这样虽然之前的数据会被删掉,但能保证集群正确启动。所以如果集群以前能启动,但后来启动不了,特别是 DataNode 无法启动,不妨试着删除所有节点(包括 Slave 节点)上的 /usr/local/hadoop/tmp 文件夹,再重新执行一次 hdfs namenode -format,再次启动试试。


执行分布式实例

执行分布式实例过程与伪分布式模式一样,首先创建 HDFS 上的用户目录:

hdfs dfs -mkdir -p /user/hadoop
将 /usr/local/hadoop/etc/hadoop 中的配置文件作为输入文件复制到分布式文件系统中:
hdfs dfs -mkdir input
hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml input

通过查看 DataNode 的状态(占用大小有改变),输入文件确实复制到了 DataNode 中,如下图所示:


接着就可以运行 MapReduce 作业了:

hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'

运行时的输出信息与伪分布式类似,会显示 Job 的进度。


可能会有点慢,但如果迟迟没有进度,比如 5 分钟都没看到进度,那不妨重启 Hadoop 再试试。若重启还不行,则很有可能是内存不足引起,建议增大虚拟机的内存,或者通过更改 YARN 的内存配置解决。



同样可以通过 Web 界面查看任务进度 http://Master00:8088/cluster,在 Web 界面点击 “Tracking UI” 这一列的 History 连接,可以看到任务的运行信息,如下图所示:



执行完毕后的输出结果:


关闭 Hadoop 集群也是在 Master 节点上执行的:

stop-all.sh

此外,同伪分布式一样,也可以不启动 YARN,但要记得改掉 mapred-site.xml 的文件名。




./mr-jobhistory-daemon.sh stop historyserver

停止JobHistoryServer服务

 ./mr-jobhistory-daemon.sh start historyserver 

附带一个拷贝文件的脚本:

scp -r /usr/local/hadoop/etc/hadoop/core-site.xml Slave00:/usr/local/hadoop/etc/hadoop/core-site.xml
scp -r /usr/local/hadoop/etc/hadoop/slaves Slave00:/usr/local/hadoop/etc/hadoop/slaves

scp -r /usr/local/hadoop/etc/hadoop/hdfs-site.xml Slave00:/usr/local/hadoop/etc/hadoop/hdfs-site.xml

scp -r /usr/local/hadoop/etc/hadoop/mapred-site.xml Slave00:/usr/local/hadoop/etc/hadoop/mapred-site.xml

scp -r /usr/local/hadoop/etc/hadoop/yarn-site.xml Slave00:/usr/local/hadoop/etc/hadoop/yarn-site.xml

scp -r /usr/local/hadoop/etc/hadoop/masters Slave00:/usr/local/hadoop/etc/hadoop/masters


scp -r /usr/local/hadoop/etc/hadoop/core-site.xml Slave01:/usr/local/hadoop/etc/hadoop/core-site.xml
scp -r /usr/local/hadoop/etc/hadoop/slaves Slave01:/usr/local/hadoop/etc/hadoop/slaves

scp -r /usr/local/hadoop/etc/hadoop/hdfs-site.xml Slave01:/usr/local/hadoop/etc/hadoop/hdfs-site.xml

scp -r /usr/local/hadoop/etc/hadoop/mapred-site.xml Slave01:/usr/local/hadoop/etc/hadoop/mapred-site.xml

scp -r /usr/local/hadoop/etc/hadoop/yarn-site.xml Slave01:/usr/local/hadoop/etc/hadoop/yarn-site.xml

scp -r /usr/local/hadoop/etc/hadoop/masters Slave01:/usr/local/hadoop/etc/hadoop/masters





参考:

http://www.powerxing.com/install-hadoop-cluster/

http://www.cnblogs.com/syveen/archive/2013/05/08/3068044.html

http://blog.csdn.net/lichangzai/article/details/8206834



  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值