Hadoop之基本环境搭建

1.Hadoop的本地运行模式


1.1克隆虚拟机!

1.2修改主机名!

  • sudo vim /etc/hostname   ,重启reboot   

1.3网络节点进行通信!

  • sduo vim /etc/hosts   192.168.91.139 master

1.4创建文件夹:

  • sudo chown pyvip:pyvip model/ software/  #赋予用户文件权限
  • tar  -zxvf   jdk...  -C /opt/model/    #解压文件

1.5安装jdk:

  • sudo vim /etc/profile  #配置jdk环境变量
  • source /etc/profile   #重启环境变量
  • java -version  #查看是否成功

1.6安装hadoop:

  • tar  -zxvf   jdk...  -C /opt/model/    #解压文件
  • sudo vim /etc/profile  #配置hadoop环境变量
  • 确认成功  hadoop!
  • #vim /opt/model/hadoop-2.7.2/etc/hadoop/hadoop-env.sh   修改JAVA_HOME路径!

1.7grep案例:

pyvip@master:/opt/model/hadoop-2.7.2$ mkdir input #创建输入文件

cp etc/hadoop/*.xml input/  #给输入文件夹拷贝

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input/ output 'dfs[a-z.]+'  
# 运行hadoop的jar文件  jar文件路径   命令  输入路径  输出路径  过滤条件
#统计出符合过滤条件的单词进行输出

1.8wordcount案例:

mkdir wcinput  #创建文件夹

touch wc.input   vi wc.input   cd ..  #写文件

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput/ wcoutput    
#启动hadoop的jar程序  wordcount命令  输入文件夹  输出文件夹


2.伪分布式运行hadoop案例


2.1配置集群:

hadoop-2.7.2的etc/hadoop目录下:
(a)配置:core-site.xml
    <!-- 指定HDFS中NameNode的地址 /主机名 hadoop101 -->
    <property>
	    <name>fs.defaultFS</name>
        <value>hdfs://hadoop101:9000</value>
    </property>
    <!-- 指定hadoop运行时产生文件的存储目录 -->
    <property>
	    <name>hadoop.tmp.dir</name>
	    <value>/opt/module/hadoop-2.7.2/data/tmp</value>
    </property>
(b)配置:hdfs-site.xml  
    <!-- 指定HDFS副本的数量 默认是三个(意思是需要有三个副本主机来存储的)-->
	<property>
		<name>dfs.replication</name>
		<value>1</value>    
	</property>

2.2启动集群:

(a)格式化namenode(第一次启动时格式化)
    bin/hdfs namenode -format
(b)启动namenode 
    sbin/hadoop-daemon.sh start namenode  #stop停止
(c)启动datanode
    sbin/hadoop-daemon.sh start datanode  #jsp查看下

2.3查看集群:

(a)查看是否启动成功
    jps  #必须配置jdk的环境变量才可以!
(b)查看产生的log日志
    当前目录:/opt/module/hadoop-2.7.2/logs
    cat hadoop-atguigu-datanode-hadoop101.log
(c)web端查看HDFS文件系统
    http://192.168.1.101:50070  #主机号/IP地址都可以!

2.4操作集群:

(a)在hdfs文件系统上创建一个input文件夹
    bin/hdfs dfs -mkdir -p /user/atguigu/input
(b)将测试文件内容上传到文件系统上
    bin/hdfs dfs -put wcinput/wc.input  /user/atguigu/input/
(c)查看上传的文件是否正确
    bin/hdfs dfs -cat  /user/atguigu/ input/wc.input
(d)运行mapreduce程序
    bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount
    /user/atguigu/input/ /user/atguigu/output
(e)查看输出结果
    命令行查看:bin/hdfs dfs -cat /user/atguigu/output/p*
    浏览器查看:/user/master/output
(f)将测试文件内容下载到本地
    hadoop fs -get /user/atguigu/output/part-r-00000 ./wcoutput/
    #把atguig下的uoutput结果下载到wcoutput里面
(g)删除输出结果
    hdfs dfs -rmr /user/atguigu/output

3.YARN上运行MapReduce 程序


3.1配置集群:

 在etc/hadoop目录下
(a)配置yarn-env.sh  修改JAVA_HOME
(b)配置yarn-site.xml
    <!-- reducer获取数据的方式 -->
    <property>
         <name>yarn.nodemanager.aux-services</name>
         <value>mapreduce_shuffle</value>
    </property>
    <!-- 指定YARN的ResourceManager的地址 -->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop101</value>
    </property>
(c)配置:mapred-env.sh 配置一下JAVA_HOME
(d)配置: 对mapred-site.xml.template重新命名为 mapred-site.xml
    mv mapred-site.xml.template mapred-site.xml
    <!-- 指定mr运行在yarn上 -->
	<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
	</property>

3.2启动集群:

(a)启动前必须保证namenode和datanode已经启动  因为yarn是调度,要先启动任务
(b)启动resourcemanager
    sbin/yarn-daemon.sh start resourcemanager
(c)启动nodemanager
    sbin/yarn-daemon.sh start nodemanager

3.3操作集群:

(a)yarn的浏览器页面查看
    http://192.168.1.101:8088/  #主机号也行
(b)删除文件系统上的output文件  #一定要提前删除 
    hdfs dfs -rm -R /user/atguigu/output
(c)执行mapreduce程序
    bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar 
    wordcount /user/atguigu/input  /user/atguigu/output
(d)查看运行结果
    hdfs dfs -cat /user/master/output/p*

 

 


4.完全分布式部署Hadoop


4.1基础linux命令:

sudo chmod 777 xsync  #改为可读可写可执行
sudo chown pyvip:pyvip xsync #更改操作用户
basename  /opt/tmp/test.txt  返回test.txt
dirname   /opt/tmp/test.txt  返回/opt/tmp
whoami  返回用户    

4.2基础环境准备

  • 虚拟机开启三台,确保可以互相通信。
  • scp可以实现服务器与服务器之间的数据完全的拷贝。
  • 详细介绍如下:
@坑:使用root用户时由于配置问题,权限错误
# 第一步: vim /etc/ssh/sshd_config
# 第二步: 注释这句话 PermitRootLogin prohibit-password
# 第三步: 新增加一条 PermitRootLogin yes
# 第四步重启服服:/etc/init.d/ssh restart
1)将本地hadoop101中/opt/module目录拷贝到hadoop102、hadoop103和hadoop104上。
    scp -r /opt/module/  root@hadoop104:/opt
2)将hadoop101服务器上的/etc/profile文件拷贝到本地hadoop102、hadoop103和hadoop104上。
    #要注意:source /etc/profile  重启环境变量
    scp root@hadoop101:/etc/profile /etc/profile
3)在hadoop103上操作将hadoop101中/opt/software/目录拷贝到hadoop102的/opt目录上。
    scp -r root@hadoop101:/opt/software root@hadoop102:/opt/ 需要先实现免密登录
  • 实现SSH无密码登录
  • 详细介绍如下:
1)基本语法
    ssh 另一台电脑的ip地址/主机名  实现了远程登录  ssh master
2)无密钥配置
    (1)进入到我的家目录,然后:cd .ssh/
    (2)生成公钥和私钥:ssh-keygen -t rsa 加三次回车
    (3)将公钥拷贝到要免密登录的目标机器上 ssh-copy-id hadoop103

  • rsync远程同步工具,用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。
  • 详细介绍如下:
把本机/opt/tmp目录同步到hadoop103服务器的root用户下的/opt        
rsync -rvl /opt/tmp root@hadoop103:/opt/
  • 编写集群分发脚本xsync
1)需求分析:循环复制文件到所有节点的相同目录下。
(1)原始拷贝:rsync  -rvl     /opt/module  root@hadoop103:/opt/
(2)期望脚本:xsync 要同步的文件名称
(3)在/usr/local/bin这个目录下存放的脚本,可以在系统任何地方直接执行。
2)案例
(1)在/usr/local/bin目录下创建xsync文件
    #!/bin/bash
    #1 获取输入参数个数,如果没有参数,直接退出
    pcount=$#
    if((pcount==0)); then
    echo no args;
    exit;
    fi
    #2 获取文件名称
    p1=$1
    fname=`basename $p1`
    echo fname=$fname
    #3 获取上级目录到绝对路径
    pdir=`cd -P $(dirname $p1); pwd`
    echo pdir=$pdir
    #4 获取当前用户名称
    user=`whoami`
    #5 循环
    for((host=103; host<105; host++)); do
            #echo $pdir/$fname $user@hadoop$host:$pdir
            echo --------------- hadoop$host ----------------
            rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
    done
(2)修改脚本 xsync 具有执行权限  chown atguigu:atguigu  xsync
(3)调用脚本形式:xsync 文件名称 比如:xsync tmp/  

4.3集群部署规划

      hadoop102                                           hadoop103                                         hadoop104

  放:NameNode                                                                                        放:SecondaryNameNode
    DataNode //副本                                   DataNode//副本                                 DataNode//副本                                            
NodeManager//对应副本                    NodeManager//对应副本                  NodeManager//对应副本                   
                                                           放:ResourceManager

4.4配置集群

@etc/hadoop目录下
(1)core-site.xml文件
    <!-- 指定HDFS中NameNode的地址 -->
	<property>
		<name>fs.defaultFS</name>
        <value>hdfs://master:9000</value>
	</property>
	<!-- 指定hadoop运行时产生文件的存储目录 -->
	<property>
		<name>hadoop.tmp.dir</name>
		<value>/opt/module/hadoop-2.7.2/data/tmp</value>
	</property>
(2)Hdfs
    hadoop-env.sh :export JAVA_HOME=/opt/module/jdk1.8.0_144
    hdfs-site.xml文件
    <configuration>	
	<property>
		<name>dfs.replication</name>
		<value>3</value>
	</property>
	<property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>slave1:50090</value>
    </property>
    </configuration>
    slaves 文件
    master
    slave2
    slave1
(3)yarn
    yarn-env.sh :export JAVA_HOME=/opt/module/jdk1.8.0_144
    yarn-site.xml文件
    <!-- reducer获取数据的方式 -->
	<property>
		 <name>yarn.nodemanager.aux-services</name>
		 <value>mapreduce_shuffle</value>
	</property>
	<!-- 指定YARN的ResourceManager的地址 -->
	<property>
		<name>yarn.resourcemanager.hostname</name>
		<value>slave2</value>
	</property>
(4)mapreduce
    mapred-env.sh :export JAVA_HOME=/opt/module/jdk1.8.0_144
    mapred-site.xml文件
    <!-- 指定mr运行在yarn上 -->
	<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
	</property>

4.5在集群上分发以上所有文件

xsync hadoop/
查看成功,在其他服务器上cat hadoop/slaves

4.6集群启动及测试

1)启动集群
(0)如果集群是第一次启动,需要格式化namenode
    bin/hdfs namenode -format
(1)启动HDFS(底下组件都会启动):
    sbin/start-dfs.sh
(2)启动yarn(底下组件都会启动)
    sbin/start-yarn.sh
2)集群基本测试
(1)上传文件到集群
     hadoop fs -mkdir -p /user/atguigu/input
    上传小文件 :hadoop fs -put wcinput/wc.input /user/atguigu/input
    上传大文件 :hadoop fs -put /opt/software/hadoop-2.7.2.tar.gz  /user/atguigu/input
(2)上传文件后查看文件存放在什么位置
    /opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/
    BP-938951106-192.168.10.107-1495462844069/current/finalized/subdir0/subdir0
(3)拼接
    cat blk_1073741836>>tmp.file #放到一个临时文件
    cat blk_1073741837>>tmp.file
    tar -zxvf tmp.file  #解压到当前文件
(4)下载
    bin/hadoop fs -get /user/atguigu/input/hadoop-2.7.2.tar.gz

4.7Hadoop启动停止方式

1)各个服务组件逐一启动
    (1)分别启动hdfs组件
        hadoop-daemon.sh  start|stop  namenode|datanode|secondarynamenode
    (2)启动yarn
        yarn-daemon.sh  start|stop  resourcemanager|nodemanager
2)各个模块分开启动(配置ssh是前提)常用
    (1)整体启动/停止hdfs:start-dfs.sh stop-dfs.sh
    (2)整体启动/停止yarn:start-yarn.sh stop-yarn.sh
3)全部启动(不建议使用)
    start-all.sh  stop-all.sh
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值