欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

2,Hadoop环境搭建之本地模式

程序员文章站 2022-07-14 14:33:09
...

二次JDK配置的原因:

Ssh命令远程调用其它结点的时候,不会加载/etc/profile文件。我们一般部署JDK的时候将JAVA_HOME写在profile文件中,hadoop需要jdk,远程脚本启动其它结点的时候会失败。需要在hadoop中再做二次jdk配置。(就是因为远程调用对方的时候不会加载对方的etc/profile文件导致拿不到JAVA_HOME)

集群配置步骤分析:

分三步1,操作系统环境的配置。2,hadoop配置文件的配置。3,格式化启动hadoop角色。

1,操作系统环境配置

  (1)JDK配置

export JAVA_HOME=/usr/java/jdk1.7.0_45
export PATH=$PATH:$JAVA_HOME/bin

  (2)ssh安装

yum -y install openssh-clients

  (3)免秘钥配置

[[email protected] .ssh]# ssh-****** -t dsa -P '' -f ./id_dsa    (生成公钥**文件)
[[email protected] .ssh]# cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys   (读取自己的公钥追加记录到authorized_keys认证文件中) 当我们ssh localhost的时候,会拿着id_dsa.pub去找本机的authorized_keys认证

2,hadoop本地模式部署配置

   (1)创建目录文件,将hadoop安装包解压到指定目录

[[email protected] hadoop-2.6.5]# mkdir /opt/sxt
[[email protected] hadoop-2.6.5]# tar -zxvf hadoop-2.6.5.tar.gz -C /opt/sxt/


解压后目录结构为:

drwxr-xr-x. 2 root root  4096 5月  24 2017 bin       hadoop项目中的功能
drwxr-xr-x. 3 root root  4096 5月  24 2017 etc 	       hadoop配置文件
drwxr-xr-x. 2 root root  4096 5月  24 2017 include
drwxr-xr-x. 3 root root  4096 5月  24 2017 lib
drwxr-xr-x. 2 root root  4096 5月  24 2017 libexec
-rw-r--r--. 1 root root 84853 5月  24 2017 LICENSE.txt
-rw-r--r--. 1 root root 14978 5月  24 2017 NOTICE.txt
-rw-r--r--. 1 root root  1366 5月  24 2017 README.txt
drwxr-xr-x. 2 root root  4096 5月  24 2017 sbin         操作系统启停服务管理脚本
drwxr-xr-x. 4 root root  4096 5月  24 2017 share		    jar包

   (2)配置hadoop的环境变量,以便可以在任何目录执行hadoop命令

export HADOOP_PREFIX=/opt/sxt/hadoop-2.6.5
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_PREFIX/bin:$HADOOP_PREFIX/sbin

   (3)Hadoop中做jdk二次配置(由于ssh远程调用的时候/etc/profile文件不会被加载) 

[[email protected] hadoop]# pwd
/opt/sxt/hadoop-2.6.5/etc/hadoop

[[email protected] hadoop]# echo $JAVA_HOME
/usr/java/jdk1.7.0_45

配置  hadoop-env.sh,yarn-env.sh,mapred-env.sh 中JAVA_HOME

  (4)调整配置文件规划hadoop角色

            1),规划NameNode位置

etc/hadoop/core-site.xml(规划NameNode在哪里):   默认文件系统入口,服务脚本启动集群的时候读到这里就知道NameNode在哪里启动了,启动时候占用9000端口通信。DataNode和NameNode通信的时候也能找到。
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://node01:9000</value>
    </property>
</configuration>

         2),etc/hadoop/hdfs-site.xml(副本数量):

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

       3),DataNode 通过slaves规划

       4),SecondaryNameNode的规划  hdfs-site.xml

<property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>node01:50090</value>
</property>

   5),由于Hadoop的临时文件存储目录在系统的tmp目录下,随时有可能被系统自己删掉,需要自己单独设置位置。core-site.xml

<property>
        <name>hadoop.tmp.dir</name>
        <value>/var/sxt/hadoop/local</value>
</property>

到目前为止,NameNode在node01,DataNode在node01,SecondaryNameNode也在node01,角色都规划好了,磁盘存放文件的目录也规划好了。 

3,格式化NameNode启动集群

Hdfs namenode -format 执行格式化NameNode操作

[[email protected] current]# cat VERSION 
#Fri Sep 28 01:46:39 CST 2018
namespaceID=1211221902
clusterID=CID-76a23f89-3eff-45a5-97cd-a43ac1bb125f
cTime=0
storageType=NAME_NODE
blockpoolID=BP-1418018278-192.168.25.201-1538070399463
layoutVersion=-60

当我们搭建完全分布式,不是在一个进程中的多线程时,或者一个大的局域网中可以搭建两套甚至多套hadoop集群,那么如何能保证这套的NameNode不会和另一套的DataNode通信呢?需要有一个标志,就是clusterID集群ID,其实格式化的时候是先创建了一个集群id,clusterID,DataNode启动的时候,空的DataNode会寻找NameNode将clusterID获取回去,只要一开始通信,就会先验证clusterID。

只能格式化一次:格式化完DataNode将clusterID拿走了,如果下次再格式化clusterID就会发生变化,DataNode将无法和NameNode通信。即DataNode的VERSION中的clusterID与NameNode的VERISON中的clusterID不同。

格式化完,启动文件系统

Start-dfs.sh 

[[email protected] dfs]# jps
2049 DataNode
1968 NameNode
2325 Jps
2183 SecondaryNameNode

[[email protected] dfs]# ll
总用量 12
drwx------. 3 root root 4096 9月  28 02:00 data
drwxr-xr-x. 3 root root 4096 9月  28 02:00 name
drwxr-xr-x. 2 root root 4096 9月  28 02:01 namesecondary

启动成功可以通过50070端口访问

NameNode会维护一个虚拟的根目录树,与我们操作系统的目录上没有任何关系。

hdfs dfs -mkdir -p

Hdfs文件系统用户的家目录的父母目录是user,hdfs只是文件系统,没有用户管理模块,由什么用户创建的文件就属于这个用户的。