您的位置:首页 > 运维架构

Hadoop生态圈开源项目总结

2014-04-07 21:29 288 查看
一.Hadoop总结

1.HDFS shell
1.0查看帮助
hadoop fs -help <cmd>
1.1上传
hadoop fs -put <linux上文件> <hdfs上的路径>
1.2查看文件内容
hadoop fs -cat <hdfs上的路径>
1.3查看文件列表
hadoop fs -ls /
1.4下载文件
hadoop fs -get <hdfs上的路径> <linux上文件>
1.5删除文件
hadoop fs -rmr <hdfs上的路径>
1.6创建文件夹
hadoop fs -mkdir /dirname

2.HDFS源码分析
FileSystem.get --> 通过反射实例化了一个DistributedFileSystem --> new DFSCilent()把他作为自己的成员变量
在DFSClient构造方法里面,调用了createNamenode,使用了RPC机制,得到了一个NameNode的代理对象,就可以和NameNode进行通信了
FileSystem --> DistributedFileSystem --> DFSClient --> NameNode的代理

3.MR执行流程
(1).客户端提交一个mr的jar包给JobClient
(2).JobClient通过RPC和JobTracker进行通信,返回一个存放jar包的地址(HDFS)和jobId
(3).client将jar包写入到HDFS当中
(4).开始提交任务(任务的描述信息,不是jar)
(5).JobTracker进程初始化任务
(6).读取HDFS上的要处理的文件,开始计算输入分片,每一个分片对应一个MapperTask
(7).TaskTracker通过心跳机制领取任务
(8).下载所需的jar,配置文件等
(9).TaskTracker启动一个java child进程,用来执行具体的任务(MapperTask或ReducerTask)
(10).将结果写入到HDFS当中

4.maptask分片
片大小:splitSize = max(minsize,min(maxsize,blockSize));
minsize:mapred.min.split.size(配置文件中设置默认没设置)
maxsize:mapred.max.split.size(配置文件中设置默认long类型的最大值263-1)
默认一般一个block块对应一个map的分片(有些文件进行压缩后不支持分块,上传到hdfs也是一块不会被拆分)
如果想多个map分片对应一个分块就要设置mapred.max.split.size

5.hadoop集群的6个配置文件
第一个:hadoop-env.sh 
export JAVA_HOME=/usr/java/jdk1.6.0_45

第二个:core-site.xml
<!-- 指定HDFS的namenode的通信地址 -->
<property>
<name>fs.default.name</name>
<value>hdfs://hadoop01:9000</value>
</property>
<!-- 指定hadoop运行时产生文件的存放目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/cloud/hadoop-1.1.2/tmp</value>
</property>

第三个:hdfs-site.xml
<!-- 配置HDFS副本的数量 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>

第四个:mapred-site.xml
<!-- 指定jobtracker地址 -->
<property>
<name>mapred.job.tracker</name>
<value>hadoop01:9001</value>
</property>

第五个:masters(指定secondarynamenode地址)
hadoop01

第六个:slaves
hadoop02
hadoop03 

6.动态添加一台节点
6.1修改主机名 vim /etc/sysconfig/network
6.2使用root用户登录,右键点击右上角网络,选择Edit connections,修改Auto eth1,设置为manual方式,添加IP,NETMASK,GAYEWAY,再点apply
6.3关闭防火墙 service iptables stop ;chkconfig iptables off 重启机器:reboot
6.4配置主节点和新添加节点的hosts文件
6.5分别启动datanode和tasktracker
hadoop-daemon.sh start datanode
hadoop-daemon.sh start tasktracker
6.6在主节点上即namenode所在节点上运行命令刷新
hadoop dfsadmin -refreshNodes

7.hadoop集群管理相关命令
hadoop安全模式:Safe mode is ON(可以读取文件,但是不可以向HDFS写入文件)
hadoop dfsadmin -safemode enter(进入安装器模式) / leave(离开安全模式) / get(获取当前状态) / wait(竟然等待状态)
hadoop mradmin -safemode enter / leave / get / wait 

二.配置mysql远程连接
GRANT ALL PRIVILEGES ON database.* TO 'root'@'192.168.1.201' IDENTIFIED BY '123' WITH GRANT OPTION;
FLUSH PRIVILEGES; 

三.Sqoop总结
注:将数据库连接驱动拷贝到$SQOOP_HOME/lib里
第一类:sqoop和hdfs交互
数据库中的数据导入到HDFS上
sqoop import --connect jdbc:mysql://192.168.1.10:3306/database --username root --password 123  --table trade_detail --columns 'id, account, income, expenses'
指定输出路径、指定数据分隔符
sqoop import --connect jdbc:mysql://192.168.35.100:3306/database --username root --password 123  --table trade_detail --target-dir '/sqoop/td' --fields-terminated-by '\t'
指定Map数据 -m 
sqoop import --connect jdbc:mysql://192.168.1.10:3306/database --username root --password 123  --table trade_detail --target-dir '/sqoop/td1' --fields-terminated-by '\t' -m 2
增加where条件, 注意:条件必须用引号引起来
sqoop import --connect jdbc:mysql://192.168.1.10:3306/database --username root --password 123  --table trade_detail --where 'id>3' --target-dir '/sqoop/td2' 
增加query语句(使用 \ 将语句换行)
sqoop import --connect jdbc:mysql://192.168.1.10:3306/database --username root --password 123 \
--query 'SELECT * FROM trade_detail where id > 2 AND $CONDITIONS' --split-by trade_detail.id --target-dir '/sqoop/td3'

注意:如果使用--query这个命令的时候,需要注意的是where后面的参数,AND $CONDITIONS这个参数必须加上
而且存在单引号与双引号的区别,如果--query后面使用的是双引号,那么需要在$CONDITIONS前加上\即\$CONDITIONS
如果设置map数量为1个时即-m 1,不用加上--split-by ${tablename.column},否则需要加上
将HDFS上的数据导出到数据库中(结尾的-m 1设置执行的map个数为1)
sqoop export --connect jdbc:mysql://192.168.8.120:3306/database --username root --password 123 --export-dir '/td3' --table td_bak -m 1
第二类:sqoop和hive交互
sqoop import --connect jdbc:mysql://192.168.35.100:3306/database --username root --password 123 --table user_info --hive-import --hive-overwrite --hive-table user_info --fields-terminated-by '\t'

四.ZooKeeper总结
1.应用场景(简单介绍7个场景)
数据发布与订阅(配置中心)、负载均衡、命名服务、分布式通知/协调、集群管理与Master选举、分布式锁、分布式队列
2.zk要部署奇数个
3.注意事项(特别要注意,否则启动报错)
在(dataDir=/cloud/zookeeper-3.4.5/tmp)创建一个myid文件,里面内容是server.N中的N(server.2里面内容为2)
echo "1" > myid
将配置好的zk拷贝到其他节点在其他节点上一定要修改myid的内容
在hadoop02应该讲myid的内容改为2 (echo "2" > myid)
在hadoop03应该讲myid的内容改为3 (echo "3" > myid)

五.HBase总结
简介:
建立的hdfs之上,提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统。它介于nosql和RDBMS之间,仅能通过主键(row key)
和主键的range来检索数据,仅支持单行事务(可通过hive支持来实现多表join等复杂操作)。主要用来存储非结构化和半结构化的松散数据。
与hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。
HBase中的表一般有这样的特点:
1) 大:一个表可以有上亿行,上百万列
2) 面向列:面向列(族)的存储和权限控制,列(族)独立检索。
3) 稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。
1.HBase启动顺序
启动hadfs start-dfs.sh -->启动zk zkServer.sh start --> 启动hbase start-hbase.sh -->启动第二个hbase master: hbase-daemon.sh start master
2.不要忘记修改hbase-env.sh
export HBASE_MANAGES_ZK=false
//告诉hbase使用外部的zk

六.Flume总结
配置HDFS Sink时首先需要将$HADOOP_HOME/hadoop-core-1.0.4.jar和$HADOOP_HOME/lib/commons-configuration-1.6.jar拷贝到$FLUME_HOME/lib/下
启动(切换到flume的安装路径下启动)
#将日志信息打印到控制台
bin/flume-ng agent -n agent -c conf -f conf/flume-conf.properties -Dflume.root.logger=INFO,console
#将产生的日志信息保存到日志文件中,并后台运行
bin/flume-ng agent -n agent -c conf -f conf/flume-conf.properties >logs/flume_log.log &

七.hive的总结就不赘述了,专门写了博文进行介绍
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: