了解Hadoop
简介
Hadoop目前属于Apache基金会,是针对海量数据处理的理想工具。我的学习教材主要是Hadoop权威指南(中文版)。
Hadoop起源于Nutch,在Yahoo的帮助下,Nutch的分布式运算这部分被独立出来,命名为Hadoop。Hadoop克隆了Google运行系统的主要框架,包括文件系统HDFS、计算架构MapReduce及结构化数据处理的HBase等。
Hadoop最核心的设计就是HDFS和MapReduce
Hadoop的知识体系:
http://lib.csdn.net/base/20/structure
Hadoop生态:
hadoop文档地址:
http://hadoop.apache.org/docs/r1.0.4/cn/index.html
工作原理
海量数据处理的一重要问题是当前数据访问速度比较慢,一个1T的硬盘要读取整体磁盘花费的时间可能需要2个半小时以上。为了提高访问速度,一个有效的方式是并行访问多块硬盘,让数据冗余放置。要解决的问题是:
- 问题一、硬件故障:解决方法,复制冗余放置数据。
问题二、数据合并
- 海量数据存储 HDFS实现
- 数据分析由MapReduce实现
- 非结构化数据收集处理——Fuse、WebDAV、Chukwa、Flume、Scribe。
- 数据导入HDFS中,RDBSM也可以加入到HDFS——HHO、Sqoop。
- 数据处理还可以使用Pig Hive Jaql。
- 让数据可见——Drilldown、Intellicus。
- 用高级语言管理你的任务流——Oozie、Cascading。
- Hadoop自己监控管理工具——Hue、Karmasphere、Eclipse plugin、Cacti、Ganglia。
- 数据序列化处理与任务调度——Avro、ZooKeeper。
- 构建在Hadoop上层的服务——Mahout、Elastic map reduce。
- OLTP存储系统——Hbase。
- 基于Hadoop的实时分析——Impala。
关系型数据库与MapReduce比较:
项目 | 关系型数据库 | MapReduce |
---|---|---|
数据大小 | GB | PB |
访问 | 交互型和批处理 | 批处理 |
更新 | 多次读写 | 一次写入多次读取 |
结构 | 静态模式 | 动态模式 |
集成度 | 高 | 低 |
伸缩性 | 非线性 | 线性 |
结构化数据数量 | 结构化数据 | 可以有效处理大结构化数据 |
Hadoop常用项目
- Hive 基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整 SQL 查询功能,可以将SQL语句转换为MapReduce任务进行运行。
- Pig 基于Hadoop的大规模数据分析平台。
- Mahout 提供一些可扩展的机器学习领域经典算法的实现。
- Flume Cloudera提供的一个高可用的、高可靠的、分布式的海量日志采集、聚合、传输的系统。
- Sqoop 将Hadoop和关系型数据库中的数据相互转移的工具,可以将关系型数据库中的数据导入Hadoop的HDFS中。
- Oozie JavaWeb应用程序,运行Tomcat中,并使用数据库来存储工作流。
- ZooKeeper 针对大型分布式系统的可靠协调系统。
- Impala 采用与Hive相同的元数据、SQL语法、ODBC驱动程序和用户接口。
Hadoop安装方式
- 单机模式:安装简单
- 伪分布式模式 :单节点上同时启动NameNode、DataNode、JobTracker、TaskTracker、Secondary Namenode等5个进程 , 模拟分布式运行的各个节点。
- 完全分布式模式
常用命令
格式化namenode
hdfs namenode -format
- 1
*列出文件
hdfs dfs -ls /
- 1
修改hdfs权限
hdfs dfs -chmod -R 755 /
- 1
修改所有者
hdfs dfs -chown -R larry /
- 1
解除安全模式
hdfs dfsadmin -safemode leave
- 1
改变文件所属组
hdfs dfs -chgrp [-R] GROUP URI
- 1
这里也记录了一部分命令:
http://blog.csdn.net/xundh/article/details/50905100#t30
![](/qrcode.jpg)
Hadoop 安全问题
认证优先级
user获取
优先从kerberos获取(kerberos模式);
从系统HADOOP_USER_NAME变量获取;
从java属性HADOOP_USER_NAME获取;
获取操作系统当前用户
group获取
从定义的group映射关系获取hadoop.user.group.static.mapping.overrides;
从配置的group映射 类获取(hadoop.security.group.mapping);
从系统groups user获取
如果出现:
Access denied for user hadoop.Superuser privilege is required
这时可以看看
echo $HADOOP_USER_NAME
vi ~/bash_profile
- 1
- 2
- 3
export HADOOP_USER_NAME=root
- 1
source ~/bash_profile
- 1
这样就把当前用户切换为root了。