hadoop伪分布式集群搭建

hadoop伪分布式集群搭建本文步骤较多 请细心查看 基础设施 基础设施环境如下 jdk 1 7 提前设置好环境变量 ssh 自己和自己之间进行免密登陆 如在 layne1 上执行 ssh layne1 时间同步 设置本机 ip 设置主机名 可参考 Linux 切换运行级别 关闭防火墙 禁用 selinux 关闭 sshd

大家好,我是讯享网,很高兴认识大家。

本文步骤较多,请细心查看。

基础设施

基础设施环境如下:

  • jdk 1.7+(提前设置好环境变量)
  • ssh自己和自己之间进行免密登陆,如在layne1上执行ssh layne1
  • 时间同步
  • 设置本机ip
  • 设置主机名

可参考Linux切换运行级别、关闭防火墙、禁用selinux、关闭sshd、时间同步、修改时区、拍摄快照、克隆操作、修改语言环境。

另外,不得不提Linux系统远程执行和远程登陆的区别:

  • 远程执行:不需要用户交互,而是用户直接给出一个命令,直接在远程执行,不会加载 /etc/profile
  • 远程登陆:返回一个交互接口,返回接口/bash 会加载/etc/profile

操作步骤

我在主机名为layne1上搭建hadoop伪分布式集群,详细步骤如下

1、配置免密钥

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa cat ~/.ssh/id_dsa.pub > ~/.ssh/authorized_keys 

讯享网
  • id_dsa.pub 存放每台服务器自己的公钥
  • authorized_keys 存放的也是服务器的公钥,不过除了自己的公钥外,也可以存放其它服务器的公钥。

再执行ssh layne1,让其自己和自己之间进行免密登陆。

2、上传hadoop的tar包hadoop-2.6.5.tar.gz到Linux系统的/opt/apps目录下

3、解压hadoop-2.6.5.tar.gz/opt目录

讯享网[root@layne1 apps]# tar -zxvf hadoop-2.6.5.tar.gz -C /opt 

4、删除hadoop-2.6.5/share/下的doc目录,doc里面是一些页面和文档,在Linux上没用,删除以后我们把这个hadoop复制到其他服务器上速度比较快

[root@layne1 hadoop-2.6.5]# pwd /opt/hadoop-2.6.5 [root@layne1 hadoop-2.6.5]# cd share [root@layne1 share]# ls doc hadoop [root@layne1 share]# rm -rf doc [root@layne1 share]# ls hadoop 

5、添加hadoop环境变量

HADOOP_HOME以及HADOOP_HOME/binHADOOP_HOME/sbin添加到环境变量,在/etc/profile里最后一行添加:

讯享网export HADOOP_HOME=/opt/hadoop-2.6.5 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin 

再执行source /etc/profile使其立即生效。

6、hadoop-env.sh配置

由于通过SSH远程启动进程的时候默认不会加载/etc/profile设置,JAVA_HOME变量就加载不到,需要手动指定。

/opt/hadoop-2.6.5下,输入vim ./etc/hadoop/hadoop-env.sh,找到JAVA_HOME所在的行,并改为export JAVA_HOME=/usr/java/default

[root@layne1 hadoop-2.6.5]# pwd /opt/hadoop-2.6.5 [root@layne1 hadoop-2.6.5]# cd ./etc/hadoop/ [root@layne1 hadoop]# vim hadoop-env.sh 


讯享网

7、配置core-site.xml

讯享网[root@layne1 hadoop]# pwd /opt/hadoop-2.6.5/etc/hadoop [root@layne1 hadoop]# vim core-site.xml  

这个文件指定的是namenode的访问

<configuration> <!-- 指定访问HDFS的时候路径的默认前缀 / hdfs://layne1:9000/ --> <property> <name>fs.defaultFS</name> <value>hdfs://layne1:9000</value> </property> <!-- 指定hadoop的临时目录位置,它会给namenode、secondarynamenode以及datanode的存储目录指定前缀 --> <property> <name>hadoop.tmp.dir</name> <value>/var/layne/hadoop/pseudo</value> </property> </configuration> 

配置文件拷贝后格式不美观,可以通过以下方式格式化:

  1. 在vim命令按ESC回报命令模式,把光标定位在<configuration>行首
  2. 输入Ctrl+V
  3. 按键盘上的下箭头按钮,直到<configuration/>
  4. 输入:!xmllint -format -,然后回车
  5. 删除<configuration>上一行多出的<?xml version="1.0"?>

值得一提的是,这些配置都可以在hadoop-2.6.5\share\doc\hadoop\index.html里面找到,最好用IE浏览器打开,否则可能不识别。

在windows上用IE浏览器打开hadoop-2.6.5\share\doc\hadoop\index.html,点击进入core-default.xml

可以看到,hadoop.tmp.dir的默认配置为/tmp/hadoop-${user.name},即在Linux的临时文件下保存,所以我们要修改配置

要记住:

  • core-default.xml中的所有配置都可以在core-site.xml 中进行配置。
  • hdsf-default.xml中的所有配置都可以在hdfs-site.xml 中进行配置。

8、配置hdfs-site.xml

讯享网[root@layne1 hadoop]# pwd /opt/hadoop-2.6.5/etc/hadoop [root@layne1 hadoop]# vim hdfs-site.xml  

加入以下内容:

<configuration> <!-- 指定block副本数 --> <property> <name>dfs.replication</name> <value>1</value> </property> <!-- 指定secondarynamenode所在的位置 --> <property> <name>dfs.namenode.secondary.http-address</name> <value>layne1:50090</value> </property> </configuration> 

9、配置slaves

这里是配置datanode结点

讯享网[root@layne1 hadoop]# pwd /opt/hadoop-2.6.5/etc/hadoop [root@layne1 hadoop]# vim slaves layne1 

即在slaves输入layne1

10、格式化hadoop

下面可以看到,第7步配置的临时目录位置不存在

[root@layne1 hadoop]# ls /var/layne/hadoop/pseudo ls: cannot access /var/layne/hadoop/pseudo: No such file or directory 

现在输入

讯享网hdfs namenode -format 

再次查看日志

[root@layne1 hadoop]# ls /var/layne/hadoop/pseudo dfs [root@layne1 hadoop]# cd /var/layne/hadoop/pseudo/dfs [root@layne1 dfs]# ls name [root@layne1 dfs]# cd name [root@layne1 name]# ls current [root@layne1 name]# cd current [root@layne1 current]# ls fsimage_0000000000000000000 fsimage_0000000000000000000.md5 seen_txid VERSION [root@layne1 current]# pwd /var/layne/hadoop/pseudo/dfs/name/current 

11、启动hadoop

输入以下命令启动hadoop

讯享网start-dfs.sh 

启动过程如下:

[root@layne1 current]# start-dfs.sh 21/03/16 21:19:40 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable Starting namenodes on [layne1] layne1: starting namenode, logging to /opt/hadoop-2.6.5/logs/hadoop-root-namenode-layne1.out layne1: starting datanode, logging to /opt/hadoop-2.6.5/logs/hadoop-root-datanode-layne1.out Starting secondary namenodes [layne1] layne1: starting secondarynamenode, logging to /opt/hadoop-2.6.5/logs/hadoop-root-secondarynamenode-layne1.out 21/03/16 21:20:15 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 

12、查看hadoop进程

输入jps

讯享网[root@layne1 current]# jps 1623 SecondaryNameNode 1467 DataNode 1389 NameNode 1741 Jps 

说明进程都正常启动了,然后网页访问:

http://layne1:50070

进入文件系统

下图可以看出,文件系统为空

13、上传文件

我们试着上传一个文件

[root@layne1 apps]# ll total  -rw-r--r-- 1 root root  Mar 16 19:30 hadoop-2.6.5.tar.gz -rw-r--r-- 1 root root  Feb 23 13:34 jdk-8u221-linux-x64.rpm -rw-r--r-- 1 root root  Feb 23 13:34 zookeeper-3.4.6.tar.gz [root@layne1 apps]# hdfs dfs -put hadoop-2.6.5.tar.gz / 21/03/16 21:29:03 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 

现在可以看到上传的文件

点击文件名称,可以看到该文件被分为两个block块,第一个block为128M(没有指定block,默认大小为128M)

然后,我们自己生成一个文件

讯享网[root@layne1 apps]# pwd /opt/apps [root@layne1 apps]# for i in `seq `; do echo "hello layne $i" >> hh.txt; done 

上传生成的hh.txx文件,文件block块大小为字节,重复数为1:

hdfs dfs -D dfs.blocksize= -D dfs.replication=1 -put hh.txt / 

再次刷新,就能看到上传的文件了。

从上图可以看出,刚刚上传的hh.txx文件块大小为1M,这是因为1024x1024=dfs.blocksize单位是字节,即bytes,1KB=1024bytes,所以1024x1024bytes=bytes=1024KB=1M

-D dfs.replication=1指定副本数为1,如果不指定,默认按照第8步dfs.replication配置的副本数。一般来说,可以将不重要的文件的副本数设置小一点。

在上传文件时,-D dfs.blocksize-D dfs.replication可以不指定,所以上传文件的格式为:

讯享网hdfs dfs -put 被上传的文件全路径名或相对路径名 放置的hdfs目录 

比如,hdfs dfs -put test.txt /a/b,就是将当前目录下的test.txt文件,上传到hdfs的a/b目录下,这个前提是a/b目录一定要存在。

14、查看hdfs中的文件

[root@layne1 apps]# hdfs dfs -ls / 21/03/16 21:55:34 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable Found 2 items -rw-r--r-- 1 root supergroup  2021-03-16 21:29 /hadoop-2.6.5.tar.gz -rw-r--r-- 1 root supergroup  2021-03-16 21:53 /hh.txt 

当然,也可以在浏览器中查看。

15、查看hadoop存储目录

讯享网[root@layne1 dfs]# pwd /var/layne/hadoop/pseudo/dfs [root@layne1 dfs]# ls data name namesecondary 

查看生成的块

[root@layne1 subdir0]# pwd /var/layne/hadoop/pseudo/dfs/data/current/BP--192.168.218.51-49/current/finalized/subdir0/subdir0 [root@layne1 subdir0]# ll -h total 194M -rw-r--r-- 1 root root 128M Mar 16 21:29 blk_ -rw-r--r-- 1 root root 1.1M Mar 16 21:29 blk__1001.meta -rw-r--r-- 1 root root 63M Mar 16 21:29 blk_ -rw-r--r-- 1 root root 500K Mar 16 21:29 blk__1002.meta -rw-r--r-- 1 root root 1.0M Mar 16 21:53 blk_ -rw-r--r-- 1 root root 8.1K Mar 16 21:53 blk__1003.meta -rw-r--r-- 1 root root 723K Mar 16 21:53 blk_ -rw-r--r-- 1 root root 5.7K Mar 16 21:53 blk__1004.meta 

查看datanode相关信息

讯享网[root@layne1 current]# pwd /var/layne/hadoop/pseudo/dfs/data/current [root@layne1 current]# cat VERSION  #Tue Mar 16 21:20:02 CST 2021 storageID=DS-bd5deff9-13b7-4c66-bf6f-b044da77d527 clusterID=CID-18a01d3b-2057-4277-9220-cd9a8 cTime=0 datanodeUuid=6e4f5a59-386e-48d2-a4dd-aa4c36b723e0 storageType=DATA_NODE layoutVersion=-56 

16、关闭hadoop

stop-dfs.sh 
小讯
上一篇 2025-01-11 17:19
下一篇 2025-03-01 10:51

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/15506.html