原生态Apache hadoop 2.7.7 搭建,包括搭建完成后的测试

说明:

在搭建时,笔者只用了2台服务器进行搭建集群,后期想扩展集群,请想搭建完成这套,你就理解了,搭建原生态的Apache Hadoop,真的是很多坑,在这笔者已经帮踩了

环境:

Hadoop下载url:
http://archive.apache.org/dist/hadoop/core/
下载过慢,可以私聊我,我有百度盘的tar包

用到的包:
hadoop-2.7.7.tar.gz
jdk-8u281-linux-x64.tar.gz		#要用oracle的JPK

ip、节点名、环境:
192.168.0.97 192-168-0-97	Ubuntu 16.04.7 LTS
192.168.0.192 192-168-0-192	Ubuntu 16.04.7 LTS

1、新建用户组(所有节点)

新建大数据组hadoop,将ubuntu加入

sudo groupadd hadoop
sudo usermod -a -G hadoop ubuntu

2、添加/etc/hosts(所有节点)

192.168.0.97 192-168-0-97
192.168.0.192 192-168-0-192

3、新建公秘钥、分发(所有节点)

ssh-keygen	-t rsa
ssh-copy-id 节点名称

4、安装jdk(所有节点)

将jdk-8u281-linux-x64.tar.gz上传

cd /opt
sudo tar -zvxf jdk-8u281-linux-x64.tar.gz 
sudo mkdir /data/hadoop
sudo mv jdk1.8.0_281 /data/hadoop/jdk-8
ls /data/hadoop/jdk-8/
#解压后重命名移动到/data下

修改环境变量

vim /etc/profile

末尾追加:

#JAVA_jdk
export JAVA_HOME=/data/hadoop/jdk-8
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

保存且验证

source /etc/profile

java -version
echo $JAVA_HOME

5、安装hadoop(所有节点)

上传hadoop-2.7.7.tar.gz

tar -zvxf hadoop-2.7.7.tar.gz
sudo mv hadoop-2.7.7 /data/hadoop/hadoop

sudo mkdir /data/hadoop/hadoop/hdfs
sudo mkdir /data/hadoop/hadoop/hdfs/tmp
sudo mkdir /data/hadoop/hadoop/hdfs/name
sudo mkdir /data/hadoop/hadoop/hdfs/data

配置文件里的注释格式

<!-- 描述 -->
①配置core-site.xml(所有节点)

这个是hadoop的核心配置文件,这里需要配置的就这两个属性,fs.default.name配置了hadoop的HDFS系统的命名

cd /data/hadoop/hadoop/etc/hadoop/
sudo vim core-site.xml

然后在中加入以下代码:

在<configuration></configuration>中如下配置是读写sequence file 的 buffer size,可减少 I/O 次数。在大型的 Hadoop cluster,建议可设定为 65536 到 131072,默认值 4096。第一个属性中的value和我们之前创建的/data/hadoop/hadoop/hdfs/tmp路径要一致

fs.defaultFS //为masterIP地址,其实也可以使用主机名或者域名,这个属性用来指定namenode的hdfs协议的文件系统通信地址,可以指定一个主机+端口,也可以指定为一个namenode服务(这个服务内部可以有多台namenode实现ha的namenode服务)

io.file.buffer.size    //该属性值单位为KB,131072KB即为默认的64M,这个属性用来执行文件IO缓冲区的大小

hadoop.tmp.dir    //指定hadoop临时目录,前面用file:表示是本地目录。有的教程上直接使用/usr/local,我估计不加file:应该也可以。hadoop在运行过程中肯定会有临时文件或缓冲之类的,必然需要一个临时目录来存放,这里就是指定这个的。当然这个目录前面我们已经创建好了。
<configuration>
<!-- 配置Hadoop运行产生的临时数据存储目录 -->
<property>
   <name>hadoop.tmp.dir</name>
   <value>file:/data/hadoop/hadoop/hdfs/tmp</value>
   <description>A base for other temporary directories.</description>
 </property>

<!-- 配置操作HDFS的缓存大小 --> 
 <property>
  <name>io.file.buffer.size</name>
   <value>131072</value>
 </property>
 
<!-- 指定文件系统的名称-->
<property>
   <name>fs.defaultFS</name>
   <value>hdfs://192-168-0-97:9000</value>
 </property>
</configuration>

属性说明:

参数属性值解释
fs.defaultFSNameNode URIhdfs://host:port/
io.file.buffer.size131072SequenceFiles文件中.读写缓存size设定
②配置 hadoop-env.sh文件,用于配置jdk目录(所有节点)

该文件是hadoop运行基本环境的配置,需要修改的为java虚拟机的位置。

然后将export JAVA_HOME=${JAVA_HOME}注释掉配置成具体的路径

sudo vim hadoop-env.sh

# The java implementation to use.
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/data/hadoop/jdk-8
③配置mapred-env.sh,加入JAVA_HOME(所有节点)

sudo vim mapred-env.sh

# export JAVA_HOME=/home/y/libexec/jdk1.6.0/
export JAVA_HOME=/data/hadoop/jdk-8		#加上
export HADOOP_JOB_HISTORYSERVER_HEAPSIZE=1000
export HADOOP_MAPRED_ROOT_LOGGER=INFO,RFA
④在yarn-env.sh加入JAVA_HOME(所有节点)

该文件是yarn框架运行环境的配置,同样需要修改java虚拟机的位置。

sudo vim yarn-env.sh

# resolve links - $0 may be a softlink
export YARN_CONF_DIR="${YARN_CONF_DIR:-$HADOOP_YARN_HOME/conf}"
export JAVA_HOME=/data/hadoop/jdk-8    #加上
⑤配置hdfs-site.xml(所有节点)

这个是hdfs的配置文件,dfs.http.address配置了hdfs的http的访问位置;
dfs.replication配置了文件块的副本数,一般不大于从机的个数。

1)主节点

sudo vim hdfs-site.xml

然后在中加入以下代码:

 		 <!-- 配置HDFS块的副本数(全分布模式默认副本数是3,最大副本数是512) -->
		 <property>
                 <name>dfs.replication</name>
                 <value>1</value>
         </property>
         
         <!-- 配置HDFS元数据的存储目录 -->
         <property>
                 <name>dfs.namenode.name.dir</name>
                 <value>file:/data/hadoop/hadoop/hdfs/name</value>
                 <final>true</final>
        </property>
        
         <!-- 配置HDFS真正的数据内容(数据块)的存储目录 -->
         <property>
                 <name>dfs.datanode.data.dir</name>
                 <value>file:/data/hadoop/hadoop/hdfs/data</value>
                 <final>true</final>
         </property>
         
         <!--  配置NameNode的RPC地址 -->
         <property>
                 <name>dfs.namenode.secondary.http-address</name>
                 <value>192-168-0-97:9002</value>
         </property>
         
         <!-- 开启通过Web操作HDFS -->
         <property>
                 <name>dfs.webhdfs.enabled</name>
                 <value>true</value>
         </property>
         
         <!-- 关闭HDFS文件的权限检查 -->
         <property>
                 <name>dfs.permissions</name>
                 <value>false</value>
         </property>

其中第二个dfs.namenode.name.dir和dfs.datanode.data.dir的value和之前创建的/hdfs/name和/hdfs/data路径一致;由于有1个从主机slave1,所以dfs.replication设置为1

2)从节点

sudo vim hdfs-site.xml

然后在中加入以下代码

         <!-- 配置HDFS块的副本数(全分布模式默认副本数是3,最大副本数是512) -->
         <property>
                 <name>dfs.replication</name>
                 <value>1</value>
         </property>

属性说明:

  • 配置NameNode
参数属性值解释
dfs.namenode.name.dir在本地文件系统所在的NameNode的存储空间和持续化处理日志如果这是一个以逗号分隔的目录列表,然 后将名称表被复制的所有目录,以备不时 需。
dfs.namenode.hosts/
dfs.namenode.hosts.exclude
Datanodes permitted/excluded列表如有必要,可以使用这些文件来控制允许 数据节点的列表
dfs.blocksize268435456大型的文件系统HDFS块大小为256MB
dfs.namenode.handler.count100设置更多的namenode线程,处理从 datanode发出的大量RPC请求
  • 配置DataNode
参数属性值解释
dfs.datanode.data.dir逗号分隔的一个DataNode上,它应该保存它的块的本地文件系统的路径列表如果这是一个以逗号分隔的目录列表,那么数据将被存储在所有命名的目录,通常在不同的设备。
⑥配置 mapred-site.xml(所有节点)

这个是mapreduce任务的配置,由于hadoop2.x使用了yarn框架,所以要实现分布式部署,必须在mapreduce.framework.name属性下配置为yarn

sudo cp mapred-site.xml.template mapred-site.xml

sudo vim mapred-site.xml

然后在中加入以下代码:

        <property>
                 <name>mapreduce.framework.name</name>
                 <value>yarn</value>
         </property>
         <property> 
                <name>mapreduce.jobhistory.address</name> 
                <value>192-168-0-97:10020</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.webapp.address</name> 
                <value>192-168-0-97:19888</value>
        </property>

属性说明:

参数属性值解释
mapreduce.framework.nameyarn执行框架设置为 Hadoop YARN.
mapreduce.map.memory.mb1536对maps更大的资源限制的.
mapreduce.map.java.opts-Xmx2014Mmaps中对jvm child设置更大的堆大小
mapreduce.reduce.memory.mb3072设置 reduces对于较大的资源限制
mapreduce.reduce.java.opts-Xmx2560Mreduces对 jvm child设置更大的堆大小
mapreduce.task.io.sort.mb512更高的内存限制,而对数据进行排序的效率
mapreduce.task.io.sort.factor100在文件排序中更多的流合并为一次
mapreduce.reduce.shuffle.parallelcopies50通过reduces从很多的map中读取较多的平行 副本
⑦配置yarn-site.xml(所有节点)

该文件为yarn框架的配置,主要是一些任务的启动位置

sudo vim yarn-site.xml

然后在标签中添加以下代码:

         <property>
                 <name>yarn.resourcemanager.address</name>
                 <value>192-168-0-97:18040</value>
         </property>
         <property>
                 <name>yarn.resourcemanager.scheduler.address</name>
                 <value>192-168-0-97:18030</value>
         </property>
         <property>
                 <name>yarn.resourcemanager.webapp.address</name>
                 <value>192-168-0-97:18088</value>
         </property>
         <property>
                 <name>yarn.resourcemanager.resource-tracker.address</name>
                 <value>192-168-0-97:18025</value>
         </property>
         <property>
                 <name>yarn.resourcemanager.admin.address</name>
                 <value>192-168-0-97:18141</value>
         </property>
         <property>
                 <name>yarn.nodemanager.aux-services</name>
                 <value>mapreduce_shuffle</value>
         </property>
         <property>
                <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
                 <value>org.apache.hadoop.mapred.ShuffleHandler</value>
         </property>

属性说明:

  • master节点配置ResourceManager 和 NodeManager:
参数属性值解释
yarn.resourcemanager.address客户端对ResourceManager主机通过 host:port 提交作业host:port
yarn.resourcemanager.scheduler.addressApplicationMasters 通过ResourceManager主机访问host:port跟踪调度程序获资源host:port
yarn.resourcemanager.resource-tracker.addressNodeManagers通过ResourceManager主机访问host:porthost:port
yarn.resourcemanager.admin.address管理命令通过ResourceManager主机访问host:porthost:port
yarn.resourcemanager.webapp.addressResourceManager web页面host:port.host:port
yarn.resourcemanager.scheduler.classResourceManager 调度类(Scheduler class)CapacityScheduler(推荐),FairScheduler(也推荐),orFifoScheduler
yarn.scheduler.minimum-allocation-mb每个容器内存最低限额分配到的资源管理器要求以MB为单位
yarn.scheduler.maximum-allocation-mb资源管理器分配给每个容器的内存最大限制以MB为单位
yarn.resourcemanager.nodes.include-path/
yarn.resourcemanager.nodes.exclude-path
NodeManagers的permitted/excluded列表如有必要,可使用这些文件来控制允许NodeManagers列表
  • slave节点配置NodeManager
参数属性值解释
yarn.nodemanager.resource.memory-mbgivenNodeManager即资源的可用物理内存,以MB为单位定义在节点管理器总的可用资源,以提供给运行容器
yarn.nodemanager.vmem-pmem-ratio最大比率为一些任务的虚拟内存使用量可能会超过物理内存率每个任务的虚拟内存的使用可以通过这个比例超过了物理内存的限制。虚拟内存的使用上的节点管理器任务的总量可以通过这个比率超过其物理内存的使用
yarn.nodemanager.local-dirs数据写入本地文件系统路径的列表用逗号分隔多条存储路径可以提高磁盘的读写速度
yarn.nodemanager.log-dirs本地文件系统日志路径的列表逗号分隔多条存储路径可以提高磁盘的读写速度
yarn.nodemanager.log.retain-seconds10800如果日志聚合被禁用。默认的时间(以秒为单位)保留在节点管理器只适用日志文件
yarn.nodemanager.remote-app-log-dirlogsHDFS目录下的应用程序日志移动应用上完成。需要设置相应的权限。仅适用日志聚合功能
yarn.nodemanager.remote-app-log-dir-suffixlogs后缀追加到远程日志目录。日志将被汇总到yarn.nodemanager.remote­app­logdir/yarn.nodemanager.remote­app­logdir/{user}/${thisParam} 仅适用日志聚合功能。
yarn.nodemanager.aux-servicesmapreduce-shuffleShuffle service 需要加以设置的Map Reduce的应用程序服务
⑧配置slaves(所有节点)

sudo vim slaves

把原本的localhost删掉,然后改为(以节点数量添加):192-168-0-192

192-168-0-192
⑨配置环境变量(所有节点)

将所有DataNode的机器名字写入此文件中,每个主机名一行

sudo vim /etc/profile

在末尾添加入下

#Hadoop
export HADOOP_HOME=/data/hadoop/hadoop
export PATH="$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH"
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

sudo source /etc/profile

⑩对目录加上权限(所有节点)

先对目录加上权限,不然会报错(所有集群)

sudo chmod -R 777 /data/hadoop/hadoop

6、启动集群(主节点)

①在master上做格式化
hdfs namenode -format  #如无报错,就正常启动
②在master启动集群

start-all.sh

This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh
Starting namenodes on [192-168-0-97]
192-168-0-97: starting namenode, logging to /data/hadoop/hadoop/logs/hadoop-ubuntu-namenode-192-168-0-97.out
192-168-0-192: starting datanode, logging to /data/hadoop/hadoop/logs/hadoop-ubuntu-datanode-192-168-0-192.out
Starting secondary namenodes [192-168-0-97]
192-168-0-97: starting secondarynamenode, logging to /data/hadoop/hadoop/logs/hadoop-ubuntu-secondarynamenode-192-168-0-97.out
starting yarn daemons
starting resourcemanager, logging to /data/hadoop/hadoop/logs/yarn-ubuntu-resourcemanager-192-168-0-97.out
192-168-0-192: starting nodemanager, logging to /data/hadoop/hadoop/logs/yarn-ubuntu-nodemanager-192-168-0-192.out
③查看集群状态

master:

jps #查看,如以下进程未启动,请按下方排错

15444 Jps
15174 ResourceManager
14999 SecondaryNameNode
14744 NameNode

slave:

jps #查看,如以下进程未启动,请按下方排错

7667 Jps
7543 NodeManager
7389 DataNode

注:

1.HDFS:分布式文件系统,隐藏集群细节,可以看做一块儿超大硬盘

     主:namenode,secondarynamenode

     从:datanode

2.Yarn:分布式资源管理系统,用于同一管理集群中的资源(内存等)

     主:ResourceManager

     从:NodeManager
④报错排查

hadoop的日志文件存储在 /data/hadoop/hadoop/logs/ 下,

hadoop-ubuntu-namenode-192-168-0-97.log
hadoop-ubuntu-namenode-192-168-0-97.out
hadoop-ubuntu-secondarynamenode-192-168-0-97.log
hadoop-ubuntu-secondarynamenode-192-168-0-97.out
yarn-ubuntu-resourcemanager-192-168-0-97.log
yarn-ubuntu-resourcemanager-192-168-0-97.out            
SecurityAuth-ubuntu.audit  

7、用自带的样例测试hadoop集群能不能正常跑任务

①求圆周率测试:

pi是类名,第一个10表示Map次数,第二个10表示随机生成点的次数

hadoop jar /data/hadoop/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar pi 10 10

输出:

Job Finished in 16.913 seconds
Estimated value of Pi is 3.20000000000000000000
②统计单词个数测试

hadoop自带的wordcount例子,这个是统计单词个数的,首先要在hdfs系统中创建文件夹,要查看hdfs系统可以通过hadoop fs -ls来查看hdfs系统的文件以及目录情况

1)hdfs中创建文件夹

hadoop fs -mkdir word_count_input #在hdfs中创建一个word_count_input文件夹

hadoop fs -ls #查看

Found 1 items
drwxr-xr-x   - ubuntu supergroup    0 2021-03-18 16:13 word_count_input
2)创建file1.txt和file2.txt文件

sudo vim file1.txt #由此可以看到:hello 5,hadoop 4,sunxj 2 win 1

hello hadoop
hello sunxj
hello hadoop
hello hadoop
hello win
sunxj hadoop

sudo vim file2.txt #由此可以看到:hello 2,linux 2,window 2

linux window
hello linux
hello window

cat *.txt #由此可以计算出world的个数分别为:hello有7个,hadoop有4,sunxj有2个,win有1个inux,有2个,window有2个

hello hadoop
hello sunxj
hello hadoop
hello hadoop
hello win
sunxj hadoop
linux window
hello linux
hello window
3)将file1.txt和file2.txt文件上传到hdfs系统的word_count_input文件夹中

格式: hadoop fs -put 文件名 hdfs文件夹名

hadoop fs -put file*.txt word_count_input

查看
# hadoop fs -ls word_count_input
Found 2 items
-rw-r--r--   1 ubuntu supergroup         74 2021-03-18 16:24 word_count_input/file1.txt
-rw-r--r--   1 ubuntu supergroup         38 2021-03-18 16:24 word_count_input/file2.txt
4)用以下命令运行wordcount

其中wordcount是类名,word_count_input是输入文件夹目录,word_count_output是输出目录

hadoop jar /data/hadoop/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount word_count_input word_count_output

输出尾部:

	File Input Format Counters 
		Bytes Read=112
	File Output Format Counters 
		Bytes Written=48
5)查看

查看文件夹下文件

hadoop fs -ls word_count_output

输出:

Found 2 items
-rw-r--r--   1 ubuntu supergroup          0 2021-03-18 16:28 word_count_output/_SUCCESS
-rw-r--r--   1 ubuntu supergroup         48 2021-03-18 16:28 word_count_output/part-r-00000
6)打印单词总数

与我们统计的相同:hello有7个,hadoop有4,sunxj有2个,win有1个inux,有2个,window有2个

hadoop fs -cat word_count_output/part-r-00000

输出:

hadoop	4
hello	7
linux	2
sunxj	2
win	1
window	2

8、通过web查看集群运行情况,首先查看

1、在华为云的web安全组设置 hadoop端口名称 与 端口号

core-site.xml:		9000
hdfs-site.xml:		9002            
mapred-site.xml:    10020       
mapred-site.xml:    19888      
yarn-site.xml:      18040     
yarn-site.xml:      18030      
yarn-site.xml:      18088    
yarn-site.xml:      18025   
yarn-site.xml:      18141

2、YARN的web页面则是在master机器上,然后端口是用yarn-site.xml配置文件中的yarn.resourcemanager.webapp.address指定的,我们配置的是18088,那么在浏览器中输入:http://192.168.0.97:18088

3、HDFS界面在master上打开,如果没有更改端口,则默认的端口是50070:http://192.168.0.97:50070

4、查看HDFS分布式文件系统状态:

/data/hadoop/hadoop/bin/hdfs dfsadmin -report

5、查看文件块组成: 一个文件由哪些块组成

/data/hadoop/hadoop/bin/hdfs fsck / -files -blocks

附加:

# hadoop中文文档:http://hadoop.apache.org/docs/r1.0.4/cn/

# hadoop5个进程的作用:http://www.aboutyun.com/thread-7088-1-1.html\

# hadoop3.2.0搭建:https://zhuanlan.zhihu.com/p/59805371

# apache hadoop3.2.2下载:http://archive.apache.org/dist/hadoop/core/hadoop-3.2.2/

下篇会用到Hive、HBase、Hue,有需求查看博主主页,谢谢

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值