1.hadoop有三个主要的核心组件:HDFS(分布式文件存储)、MAPREDUCE(分布式的计算)、YARN(资源调度),现在云计算包括大数据和虚拟化进行支撑。
在HADOOP(hdfs、MAPREDUCE、yarn)大数据处理技术框架,擅长离线数据分析.
Zookeeper 分布式协调服务基础组件,Hbase 分布式海量数据库,离线分析和在线业务处理。
Hive sql 数据仓库工具,使用方便,功能丰富,基于MR延迟大,可以方便对数据的分析,并且数据的处理可以自定义方法进行操作,简单方便。
Sqoop数据导入导出工具,将数据从数据导入Hive,将Hive导入数据库等操作。
Flume数据采集框架,可以从多种源读取数据。
Azkaban对操作进行管理,比如定时脚本执行,有图形化界面,上传job简单,只需要将脚本打成bao,可直接上传。
2.hadoop的可以做离散日志分析,一般流程是:
将web中的数据取过来【通过flume】,然后通过预处理【mapreduce,一般只是使用map就可以了】,就是将数据中没有用处的数据去除掉,将数据转换【比如说时间的格式,Agent的组合】,并将数据进行处理之后以固定格式输出,由Hive处理,Hive是作用是将数据转换出一个表,RTL就是写SQL的一个过程,将数据进行分析,然后将数据报表统计,这个时候使用的是pig数据分析【hive一般作为库,pig做分析,我没有使用pig,因为感觉还没有hive的HQL处理方便】,最后将含金量最大的数据放入到mysql中,然后将mysql中的数据变为可视图化的工具。
推荐的使用:当我们浏览一各网页的时候,将数据的值值传递给后台保存到log中,后台将数据收集起来,hadoop中的fiume可以将数据拿到放入到HDFS中,原始的数据进行预处理,然后使用HIVE将数据变为表,进行数据的分析,将有价值的数据放入到mysql,作为推荐使用,这个一般是商城,数据的来源也是可以通过多种方式的,比如说隐形图片、js、日志等都可以作为采集数据的来源。
3.hadoop中的HDFS有两个重要的角色:NameNode、datanode,Yarn有两个主要的主角:ResourceManager和nodeManager.
4.分布式:使用多个节点协同完成一项或者多项业务功能的系统叫做分布式系统,分布式一般使用多个节点组成,包括主节点和从节点,进行分析
5.mapreduce:是使用较少的代码,完成对海量数据的处理,比如wordCount,统计单词的个数。
实现思想:将单词一个一个的遍历,然后将单词加1处理,但是这是集群,那么就每个节点计算自己节点的数据,然后最后交给一个统计的程序完成就可以了,最后将单词和结果输出。
代码实现:
map阶段:
从HDFS的数据文件中逐行读取数据
将每一行数据切分出单词
为每一个单词构造出键值对(单词,1)[这里的1不是java类型的]
将键值对发送给reduce
public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable>{ //map方法的生命周期: 框架每传一行数据就被调用一次 //key : 偏移量 //value: 这一行的内容 @Override protected void map(LongWritable key, Text value, Context context) throws Exception { //拿到一行数据转换为string String line = value.toString(); //将这一行切分出各个单词 String[] words = line.split(" "); //遍历数组,输出<单词,1> for(String word:words){ context.write(new Text(word), new IntWritable(1)); } } }
reduce阶段:
接收到map阶段的单词的key-value键值对。
将相同的单词汇聚为一组。
对每一组,遍历组中的所有的值,累加求和,并得到最后的结果
将值保存到HDFS中。
@Override protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { //定义一个计数器 int count = 0; for(IntWritable value:values){ count += value.get(); } context.write(key, new IntWritable(count)); } }
map和reduce就实现完成了。
6.配置ssh免登陆
#生成ssh免登陆密钥
#进入到我的home目录
cd ~/.ssh
ssh-keygen -t rsa
执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
将公钥拷贝到要免密登陆的目标机器上
ssh-copy-id hostname
7. 上传 hadoop fs -put 本地目录 /远程目录
查看 hadoop fs -cat 本地目录 /远程目录
大于128M的数据,会进行切片处理,我们可以将片写入一个文件之后,数据就会比比变为上传之前的文件。
创建多级目录使用的是-p