抬头仰望星空,是否能发现自己的渺小。

伪斜杠青年

人们总是混淆了欲望和理想

Hadoop2.5伪分布式环境部署笔记(虚拟机方式)

最近,噢,不对是好久没写博客了,但是我写了超级多笔记,比如:热修复+插件化 约2w字 面试等1w字,额额,还有论文。。。

然后最近又有些新概念,恰好被我给消费了,消费了怎么说呢,花钱了总得去学下吧,了解了解也好啊,就像大数据、区块链、微服务架构。。。。

确实是搞太多了。。。。唉,不过还好没毕业 我还可以随心所欲的安排自己的事情,这是件开心的事。

正题:环境条件

centos7的mini版

hadoop-2.5.0-cdh5.3.6.tar.gz

jdk-8u162-linux-x64.tar.gz

官方文档:http://hadoop.apache.org/docs/r2.5.2/hadoop-project-dist/hadoop-common/SingleCluster.html#Pseudo-Distributed_Operation

环境部署

安装完成后,无法联网参照:

1. 打开终端输入cd /etc/sysconfig/network-scripts/,输入ls查看网卡配置文件名,每台机器的网卡名并不相同。(我改的是ifcfg-eth0)
2. 先取得root权限,再输入vi + 网卡名回车后按i进入编辑,将最后一行的ONBOOT=no改为ONBOOT=yes,最后输入:wq! 保存并退出(sudo vi ifcfg-eth0)
3. 最后输入service network restart,重启一下。

查看下系统环境:

cat /etc/redhat-release

安装openssh

yum install openssh-server

安装后使用ssh连接,使用ip addr查看ip,回车输入密码即可登录

ssh lckiss@10.211.55.8

然后可以在外部进行操作,无需安装vm tools或者其他比如parallels tools

设置下hostname

hostname -b hadoop

修改hosts的主机名

vi /etc/hosts

卸载CentOS7-x64自带的OpenJDK并安装Sun的JDK7的方法

rpm -qa | grep java
rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5(根据结果修改)

Hadoop伪分布式部署

本地模式:使用本地存储,不使用HDFS

完全分布式:多台机器搭建集群环境(真实线上环境HDFS)

伪分布式:单节点模拟集群环境(虚拟机模拟HDFS)—— 这篇文章的内容

Hadoop伪分布式部署环境搭建

切换到目录

cd /opt/

查看当前目录的文件 一般是空的 如果刚刚安装

ls

防止影响环境 删除当前目录下的一切文件 执行后opt下为空

sudo rm -rf ./*

创建相应文件

sudo mkdir soft
sudo mkdir datas
sudo mkdir tools
sudo mkdir modules

上传相关文件:( 如果上传失败 你可以考虑用root账户 或者 sudo chown -R lckiss:lckiss /opt )

新开终端切换到你存放jdk与hadoop的文件 lckiss是用户名 ip为虚拟机ip 冒号后为上传到xx目录

scp jdk-8u162-linux-x64.tar.gz lckiss@10.211.55.8:/opt/soft
scp hadoop-2.5.0-cdh5.3.6.tar.gz lckiss@10.211.55.8:/opt/soft

切换ssh到虚拟机的终端

cd /opt/soft/

释放jdk与hadoop 即将java和hadoop解压到opt/modules

tar -zxvf jdk-8u162-linux-x64.tar.gz -C /opt/modules/
tar -zxvf hadoop-2.5.0-cdh5.3.6.tar.gz -C /opt/modules/

配置java环境变量

sudo vi /etc/profile

加入:

export JAVA_HOME=/opt/modules/jdk1.8.0_162
export PATH=$PATH:$JAVA_HOME/bin

使配置生效(注意退出当前session)

source /etc/profile

测试(#后面代表执行代码 再后面是输出的结果):

#echo $JAVA_HOME
/opt/modules/jdk1.8.0_162

退出后重新连接ss,即可看到熟悉的东西

#java -version
java version "1.8.0_162"
Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)

接下来

cd /opt/modules/

给modules下的hadoop改个名

mv hadoop-2.5.0-cdh5.3.6/ hadoop/

删除hadoop的doc目录(释放空间)

sudo rm -rf /opt/modules/hadoop/share/doc/

查看磁盘空间

df -lh

切换到hadoop目录

cd /opt/modules/hadoop

查看hadoop环境

./bin/hadoop

给hadoop配置java的路径

第一个配置文件:

vi etc/hadoop/hadoop-env.sh

修改:

# The java implementation to use.
 export JAVA_HOME=/opt/modules/jdk1.8.0_162

第二个配置文件:

vi etc/hadoop/yarn-env.sh

修改:

# some Java parameters
export JAVA_HOME=/opt/modules/jdk1.8.0_162

第三个配置文件:

vi etc/hadoop/mapred-env.sh

修改(这里本来是注释了的):

export JAVA_HOME=/opt/modules/jdk1.8.0_162

两个需要修改的XML配置文件

修改配置文件 NameNode:

#vi etc/hadoop/core-site.xml
 
 <configuration> 
 <!-- 默认的文件访问入口 -->
 <property>
 <name>fs.defaultFS</name>
 <value>hdfs://localhost:8020</value>
 </property> 
 <!-- 临时文件目录入口 -->
 <property>
 <name>hadoop.tmp.dir</name>
 <value>/opt/modules/hadoop/data/tmp</value>
 </property>
 </configuration>

修改配置文件 DataNode:

#vi etc/hadoop/hdfs-site.xml
 
 <configuration>
 <property>
 <!-- 默认的副本数量为1 你可以加大—>
 <name>dfs.replication</name>
 <value>1</value>
 </property>
 </configuration>

从节点名:因为是模拟 现在用的是单节点模式,所以从节点应该与主节点相同(已从配置中去除,忽略)

修改slaves 此处默认为localhost 与上面默认的文件访问入口相同 按需修改

vi etc/hadoop/slaves

以上主从节点配置完后:

退回主目录:

cd /opt/modules/hadoop/

格式化HDFS的元数据:(格式化只能进行一次 多次会引起问题 一定要格式化则需要删除data目录)

bin/hdfs namenode -format

注意查看初始化镜像文件 ls后会有data目录

cd data/tmp/dfs/name/current

ls 你会看到生成的元数据

接下来启动下namenode与datanode

sbin/hadoop-daemon.sh start namenode
sbin/hadoop-daemon.sh start datanode

查看进程

[lckiss@hadoop hadoop]$ jps
 12417 Jps
 12344 DataNode
 12266 NameNode

接下来看管理的网址:

因为上面配置的是localhost,所以我们访问时需要使用ip来访问,当然你可以配置hosts来使用自定义的域名访问

http://10.211.55.8:50070/

查看hdfs文件系统

http://10.211.55.8:50070/explorer.html#/

无法访问?见文章底部的注意事项

HDFS文件系统的使用

进入hadoop主目录

cd /opt/modules/hadoop/

创建个文件夹吧

bin/hdfs dfs -mkdir -p /lckiss

回车后网页那边刷新下 就可以看到了 这个地方如果不加/ 比如这样

bin/hdfs dfs -mkdir -p lckiss

这个目录会创建在/user/你的用户名/lckiss

上传呢?其实bin/hdfs dfs就会显示很多命令提示

bin/hdfs dfs -put /etc/hosts /lckiss

我们这里将系统的hosts文件上传到lckiss目录

读取,回车后就会显示文件了

bin/hdfs dfs -text /lckiss/hosts

下载到/home/lckiss下 ls /home/lckiss/ 就可以看到

bin/hdfs dfs -get /lckiss/hosts /home/lckiss

PS:一些说明

#ls data/tmp/dfs/name/current/
 
 edits_inprogress_0000000000000000001 namenode没启动时的文件操作记录
 fsimage_0000000000000000000 namenode启动后读取该文件
 fsimage_0000000000000000000.md5
 VERSION
 seen_txid

Secondary namenode机器位置交互端口号配置

修改配置文件 DataNode:

# vi etc/hadoop/hdfs-site.xml
 
 <configuration>
 <property>
 <!-- 默认的副本数量为1 你可以加大—>
 <name>dfs.replication</name>
 <value>1</value>
 </property>
 <property>
 <!-- Secondary namenode机器位置交互端口号 —>
 <name>dfs.namenode.secondary.http-address</name>
 <value>0.0.0.0:50090</value>
 </property>
 </configuration>

启动下

sbin/hadoop-daemon.sh start secondarynamenode

检验下进程 jps

[lckiss@hadoop hadoop]$ jps
 12992 Jps
 12949 SecondaryNameNode
 12344 DataNode
 12266 NameNode

外部访问下

http://10.211.55.8:50090/

因为Secondary namenode无法防止数据丢失,所以后面会用框架代替,这里只用于尝试使用,关闭如下

sbin/hadoop-daemon.sh stop secondarynamenode

Yarn与mapreduce配置

1. 修改 mapred-site.xml

先更名:

mv etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml

再修改:

# vi etc/hadoop/mapred-site.xml
 
 <configuration>
 <property>
 <name>mapreduce.framework.name</name>
 <value>yarn</value>
 </property>
 </configuration>

目的是:让mapreduce运行在yarn上

1. 修改 yran-site.xml

# vi etc/hadoop/yarn-site.xml
 
 <!-- 运行mapreduce的一个服务 -->
 <configuration>
 <property>
 <name>yarn.nodemanager.aux-services</name>
 <value>mapreduce_shuffle</value>
 </property>
 </configuration>

配置完成后启动下resourcemanager与nodemanager:

sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemon.sh start nodemanager

附上:关闭命令

sbin/yarn-daemon.sh stop resourcemanager
sbin/yarn-daemon.sh stop nodemanager

Jsp查看下

[lckiss@hadoop hadoop]$ jps
 12344 DataNode
 12266 NameNode
 13307 ResourceManager
 13579 NodeManager
 13693 Jps

这样就配置完成了

外部访问:

http://10.211.55.8:8088/

如果不能访问,参考以下:

启动yarn(需要先执行过./sbin/start-dfs.sh)

./sbin/start-yarn.sh # 启动YARN
./sbin/mr-jobhistory-daemon.sh start historyserver # 开启历史服务器,才能在Web中查看任务运行情况

执行下任务 小试身手

创建一个文件夹:

bin/hdfs dfs -mkdir -p /mapreduce/input

创建一个文件:

vi /opt/modules/file.input

内容为:

By default, Hadoop is configured to run in a non-distributed mode, as a single Java process. This is useful for debugging.
The following example copies the unpacked conf directory to use as input and then finds and displays every match of the given regular expression. Output is written to the given output directory.

上传到hdfs中:

bin/hdfs dfs -put /opt/modules/file.input /mapreduce/input

统计单词的准备工作做完了,运行下(所有执行的都需要用jar,hadoop-mapreduce-examples-2.5.0-cdh5.3.6.jar这个是官方提供的例子,wordcount任务名称,后面分别为输入输出命令,输出目录不需要手动创建,如果已经存在output会报错,为了保护数据防止覆盖):

bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0-cdh5.3.6.jar wordcount /mapreduce/input/ /mapreduce/output

外部页面会有显示

[application_1521623193266_0001] | lckiss | word count | MAPREDUCE | root.lckiss | Wed Mar 21 17:22:04 +0800 2018 | Wed Mar 21 17:23:02 +0800 2018 | FINISHED | SUCCEEDED | | [History]

然后会在/mapreduce/output下生成两个文件夹

Permission Owner Group Size Replication Block Size Name 
 -rw-r--r-- lckiss supergroup 0 B 1 128 MB _SUCCESS 
 -rw-r--r-- lckiss supergroup 351 B 1 128 MB part-r-00000

_SUCCESS 说明成功了 part-r-00000是结果

我们看下结果,这样就表示成功了:

bin/hdfs dfs -text /mapreduce/output/part-r-00000

Java 1 …..

开启历史纪录管理

进入Yarn的管理网站 你会发现那个Histor是无法点击的

这里需要配置下

# vi etc/hadoop/mapred-site.xml
 
 <configuration>
 <property>
 <name>mapreduce.framework.name</name>
 <value>yarn</value>
 </property>
 <property>
 <name>mapreduce.jobhistory.address</name>
 <value>0.0.0.0:10020</value>
 </property>
 <property>
 <name>mapreduce.jobhistory.webapp.address</name>
 <value>0.0.0.0:19888</value>
 </property>
 </configuration>

启动下:

./sbin/mr-jobhistory-daemon.sh start historyserver

现在就可以访问历史纪录了。

开启logs日志聚集服务

#vi etc/hadoop/yarn-site.xml

<configuration>
<property>
 <name>yarn.nodemanager.aux-services</name>
 <value>mapreduce_shuffle</value>
</property>
<!-- 日志开启 -->
<property>
 <name>yarn.log-aggregation-enable</name>
 <value>true</value>
</property>
<!-- 日志存活时间 -->
<property>
 <name>yarn.log-aggregation.retain-seconds</name>
 <value>604800</value>
</property>
</configuration>

重启所有服务后,你就可以在历史页面点击logs了

这里有篇文章不错:

http://blog.csdn.net/qq_26937525/article/details/54616395

添加native-lib

这个需要进行编译,网上有但是不一定适用,用法是

解压到/opt/moduels/hadoop/lib中即可,解压后路径为/opt/moduels/hadoop/lib/native

一些注意的事

无法访问?关防火墙

sudo systemctl stop firewalld.service

关闭selinux

sudo vi /etc/sysconfig/selinux

修改为

SELINUX=disabled

HDFS操作错误

如果报错类似如下(因为你或许不是用的localhost)

mkdir: Call From hadoop.localdomain/10.211.55.8 to hadoop:8020 
failed on connection exception: java.net.ConnectException: 拒绝连接; 
For more details see: http://wiki.apache.org/hadoop/ConnectionRefused

需要sudo vi /etc/hosts

将hadoop 添加到127.0.0.1与::1后面

元数据错误

可能会出现 There are 0 datanode(s) running and no node(s) are excluded in this operation. 解决方案:找到hadoop安装目录下 hadoop/data/dfs/data里面的current文件夹删除 重新格式化元数据 启动Hadoop

常用操作

开启集群:

sbin/hadoop-daemon.sh start namenode
 sbin/hadoop-daemon.sh start datanode
 sbin/yarn-daemon.sh start nodemanager
 sbin/yarn-daemon.sh start resourcemanager

关闭集群:

sbin/hadoop-daemon.sh stop namenode
 sbin/hadoop-daemon.sh stop datanode
 sbin/yarn-daemon.sh stop nodemanager
 sbin/yarn-daemon.sh stop resourcemanager

开启关闭dfs与yarn

sbin/start-dfs.sh
sbin/stop-dfs.sh

sbin/start-yarn.sh
sbin/stop-yarn.sh

历史服务器

sbin/mr-jobhistory-daemon.sh start historyserver
sbin/mr-jobhistory-daemon.sh stop historyserver

删除测试用的目录

bin/hdfs dfs -rm -R /mapreduce/output
bin/hdfs dfs -rm -R /tmp

字符统计

bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0-cdh5.3.6.jar wordcount /mapreduce/input/ /mapreduce/output

结语:

慢慢折腾,官方文档也是可以看的~


本站由以下主机服务商提供服务支持:

0条评论

发表评论