hadoop

Hadoop(Lucene的改进)

特性

高可靠性:维护多个副本(默认三备份)
高扩张性:动态增加结点
高效性:并行
高容错性:自动保存多份备份

Hadoop组成

MapReduce(计算):分布式的离线并行计算框架
yarn(资源调度):作业调度与集群资源管理的框架
hdfs(数据存储):(Hadoop distributed file system) 分布式文件系统
common(公共辅助工具)
NameNode(nn):存储文件的元数据
DataNode:本地文件系统存储文件块的数据
second namenode: 用来监控hdfs状态的辅助后台程序,每隔一段时间获取hdfs元数据的快照 (一主三从,起替代作用)
MapReduce:在Hadoop的下的share下有Hadoop,内部有MapReduce的

伪分布式

就是一个节点的分布式(hadoop是分布式操作,是由多个节点构成)

运行hadoop的本地模式
  1. 首先配置文件:etc/hadoop/hadoop-env.sh
    配置Java的运行路径export JAVA_HOME=/usr/java/latest
    用bin/hadoop测试是否成功
  2. 创建目录mkdir input
    复制xml文件cp etc/hadoop/.xml input
    运行自带的一个MapReduce的样例程序,输出文件夹要求是不存在的文件夹,bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output ‘dfs[a-z.]+’
    查看输出结果cat output/
运行Wordcount

创建文件夹mkdir wcinput
在wcinput文件夹下创建一个文件:touch wc.input
编辑vi wc.input
输入:
hadoop yarn
hadoop mapreduce
回到hadoop-2.7.2的目录下执行hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput wcoutput命令
查看结果cat wcoutput/part-r-00000

伪分布式配置
  1. 首先配置vi etc/hadoop/hadoop-env.sh
    export JAVA_HOME=/opt/software/java/jdk1.8.0_144
  2. 配置vi etc/hadoop/core-site.xml
fs.defaultFS hdfs://hadoop100:9000 hadoop.tmp.dir /opt/software/hadoop/hadoop-2.7.2/data/tmp 3. 配置 vi etc/hadoop/hdfs-site.xml dfs.replication 1 #### 启动集群 1. 格式化namenode bin/hdfs namenode -format 2. 启动NameNode sbin/hadoop-daemon.sh start namenode 3. 启动DataNode sbin/hadoop-daemon.sh start datanode 4.查看集群 jps

*当namenode和datanode都启动成功之后,用192.168..:50070即可访问(在hadoop3.以后50070改为) namenode部能总格式化,因为datanode是根据namenode生成的,当生成了datanode又格式化了namenode,则namenode和datanode不匹配则启动不能成功,查看namenode的ID在cd data/tmp/dfs/name/current/下的version中,datanode的ID在cd data/tmp/dfs/data/current/下的version中

执行集群
  1. 配置yarn.env.sh文件,添加Java的工作路径
  2. 配置yarn.site.xml文件
yarn.nodemanager.aux-services mapreduce_shuffle yarn.resourcemanager.hostname hadoop100 3.配置mapred.env.sh配置Java运行路径 4. 对mapred-site.xml.template重新命名为mapred-site.xml 5.配置vi mapred-site.xml mapreduce.framework.name yarn #### 启动集群前确保NameNode和DataNode已经启动 1.启动ResourceManager:sbin/yarn-daemon.sh start resourcemanager 2. 启动NodeManager:sbin/yarn-daemon.sh start nodemanager ### 将文件上传 hadoop fs -put wcinput / 使用hadoop fs前缀+-put上传命令 +文件名+目标位置(/为根目录) #### 在目录上执行wordcount hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /wcinput /wcoutput 查看结果 hadoop fs -cat /wcoutput/* ## ==集群的部署== 集群共有:NN(namenode),DN(datanode),2NN(second namenode),RM(resourceManager),NM(nodemanager) DN和NM至少需要三台,一个集群最少需要6台机器 hdfs集群以NN为主机,yarn集群以RM 为主机 hadoop101 hadoop102 hadoop103 HDFS | Namenode |DataNode |SecondaryNameNode |DataNode | |DataNode YARN |NodeManager| ResourceManager |NodeManager | | NodeManager | #### 远程发送文件 1. scp(secure copy)安全拷贝 命令:scp -r hadoop101:/opt/software/protobuf-2.5.0.tar.gz hadoop102:/opt/software/ scp 源机器名:源文件位置 目标机器名:目标存放文件位置 2. rsync 远程同步工具 命令:rsync -av hadoop101:/opt/software/protobuf-2.5.0.tar.gz /opt/software/ rsync -av(a:归档拷贝,v:显示复制过程) 源机器名:源文件位置 目标存放文件位置 ==两者的区别== 3. scp可以都在远程操作,而rsync只能写一台远程机器名称hadoop101,接受端必须是在hadoop102本地执行, 4. rsync复制的比scp更精确,前者的上传时间也可以相同,只上传不同的,如果相同则不传 ==配置的脚本文件==
#!/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 ------------------- hadoop$host --------------
        rsync -av $pdir/$fname $user@hadoop$host:$pdir
done

注释:1. basename意为获取路径中的最后文件名 example:basename /opt/software/hadoop 结果为hadoop
2. dirname意为获取绝对路径,dirname hadoop 结果为.,需要获取全部的/opt/software则需要加-p(还可以查询到软连接的目录)
3. whoami意为查看当前用户

修改脚本权限:chmod +x xsync
配置集群

在配置完全分布式集群需要按照集群部署对core-site.xml,hdfs-site.xml,MapReduce-site.xml,yarn-site.xml进行不同的配置,然后对hadoop-env.sh,MapReduce-env.sh,yarn-env.sh进行Java路径的配置
core-site.xml进行配置

fs.defaultFS hdfs://hadoop101:9000 hadoop.tmp.dir /opt/software/hadoop/hadoop-2.7.2/data/tmp 对==hdfs-site.xml==进行配置 dfs.replication 3 dfs.namenode.secondary.http-address hadoop104:50090 对==MapReduce-site.xml==进行配置 mapreduce.framework.name yarn 对==yarn-site.xml==进行配置 yarn.nodemanager.aux-services mapreduce_shuffle yarn.resourcemanager.hostname hadoop102 #### 集群单点启动 在不同的机器启动不同的机器,在192.168.*.*:50070即可查看是否启动成功 #### SSH免密登录配置 SSH(secure shell)是一种远程非对称加密协议验证身份

1.首先生成一个密钥对,用命令ssh-keygen -t rsa 就生成了公钥和密钥
2.然后将生成的私钥发送给远程通信的机器,用ssh-copy-id hadoop102命令即可发送
3.用ssh hadoop102即可直接操作102
但是使用集群登录需要所有的机器既可以访问自己还可以访问其他所有机器需要重复发送很多遍密钥,
1.可以使用脚本重复执行发送私钥的命令,但是第一次登录需要密码,脚本中出现密码不安全
2. 首先让机器可以自己登录自己,然后使用脚本将ssh的文件夹给每一个机器发送一遍
3. 配置完之后需要启动告知主机,其子节点有哪些,在hadoop/etc/hadoop下有slaves的文件,在里面输入集群的子机器
== 在每次配置文件之后一定要用xsync把文件同步到集群的每一台机器上。

配置yarn的历史服务器和日志聚集(方便服务器崩溃之后查询)

1.首先停止yarn(stop-yarn.sh)和hdfs(stop-dfs.sh)再配置
2.配置mapred-site.xml

mapreduce.jobhistory.address hadoop103:10020 mapreduce.jobhistory.webapp.address hadoop103:19888 3.配置yarn-site.xml yarn.log-aggregation-enable true yarn.log-aggregation.retain-seconds 604800 4.==将配置文件分发一遍== 5.重启集群 6.然后在配置的机器上开启日志功能:用mr-jobhistory-daemon.sh start historyserver命令 ==为了方便对集群的jps进行操作== 加一个jspall的脚本,使用chmod +x jpsall使脚本生效 ``` #!/bin/bash for i in hadoop101 hadoop102 hadoop103 do echo ===================== $i ====================== ssh $i "source /etc/profile && jps | grep -v Jps" done ``` #### 集群时间同步 使用的是ntp协议 1.首先查看集群是否有ntp协议:用命令:rpm -qa|grep ntp 2. 查看ntp的运行状态:命令:service ntpd status 3.需要关闭ntp服务:命令service ntpd stop ;chkconfig ntpd off;chkconfig --list ntpd 4.接下来才可以配置ntp协议,首先选定一个主机,其他机器从主机拉取时间 5.修改修改ntp配置文件vi /etc/ntp.conf a)(授权192.168.1.0-192.168.1.255网段上的所有机器可以从这台机器上查询和同步时间) #restrict 192.168.153.0 mask 255.255.255.0 nomodify notrap为 restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap b)修改2(集群在局域网中,不使用其他互联网上的时间) server 0.centos.pool.ntp.org iburst server 1.centos.pool.ntp.org iburst server 2.centos.pool.ntp.org iburst server 3.centos.pool.ntp.org iburst为 #server 0.centos.pool.ntp.org iburst #server 1.centos.pool.ntp.org iburst #server 2.centos.pool.ntp.org iburst #server 3.centos.pool.ntp.org iburst c)(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步) server 127.127.1.0 fudge 127.127.1.0 stratum 10 6.修改vim /etc/sysconfig/ntpd SYNC_HWCLOCK=yes 7.重新启动ntp协议 8.设置开机自启动 chkconfig ntpd on 9.其他机器设置定时到主机拉取时间 1.首先crontab -e 2.编写定时任务如下: */1 * * * * /usr/sbin/ntpdate hadoop101 3.修改任意机器时间 date -s "2017-9-11 11:11:11" 4.过1分钟之后使用date查看是否改变

yarn

资源调度者,类似一个pool池,当有新的需求进入的时候进行资源的分配,默认是容量调度器,分为多个区块,每个区块按照先来先服务(FIFO)的方式分配;但是容量调度器对资源的分配不够灵活,可以使用公平调度器来进行调度,会根据所来资源的多少进行合理的分配,减少资源的浪费

任务的推测执行

当有多个任务同时执行时,假设有8台机器,7台机器均速度快,其中一台速度远低于其他任务,hadoop于是新找一个节点(只找一个节点)执行备份任务,两个任务同时执行,其中快的保留结果,最慢的任务则remove掉
mapred-site.xml文件中默认是打开的

<property>
  	<name>mapreduce.map.speculative</name>
  	<value>true</value>
  	<description>If true, then multiple instances of some map tasks may be executed in parallel.</description>
</property>

<property>
  	<name>mapreduce.reduce.speculative</name>
  	<value>true</value>
  	<description>If true, then multiple instances of some reduce tasks may be executed in parallel.</description>
</property>

管理9000服务器

  1. hadoop fs -rm -r hdfs://192.168.153.101:9000/t*
    删除以t开头的文件
  2. hadoop fs -rm -r hdfs://192.168.153.101:9000/*.txt
    删除txt文件
  3. hadoop fs -mkdir /student
    在根目录下创建文件夹
  4. hadoop fs -put student.txt /student
    上传student文件
  5. hadoop jar 1.jar(jar包) com.atguigu.etl.ETLDriver(运行的主程序) /guli/video(输入文件位置) /guli/video_etl(输出文件位置)
    使用jar包对数据进行清洗
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值