大数据开发面试随笔记录

大数据开发

星型模型和雪花模型

星型模型:是一种多维的数据关系,它由一个事实表(Fact Table)和一组维表(Dimension Table)组成。每个维表都有一个维作为主键,所有这些维的主键组合成事实表的主键。事实表的非主键属性称为事实(Fact),它们一般都是数值或其他可以进行计算的数据;

雪花型模型:当有一个或多个维表没有直接连接到事实表上,而是通过其他维表连接到事实表上时,其图解就像多个雪花连接在一起,故称雪花模型。

google大数据论文

①2003年,Google发布Google File System论文,这是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。它运行于廉价的普通硬件上,提供容错功能。从根本上说:文件被分割成很多块,使用冗余的方式储存于商用机器集群上。
②紧随其后的就是2004年公布的 MapReduce论文,论文描述了大数据的分布式计算方式,主要思想是将任务分解然后在多台处理能力较弱的计算节点中同时处理,然后将结果合并从而完成大数据处理。
③最后就是谷歌发布于2006年的Bigtable,其启发了无数的NoSQL数据库,比如:Cassandra、HBase等等。Cassandra架构中有一半是模仿Bigtable,包括了数据模型、SSTables以及提前写日志(另一半是模仿Amazon的Dynamo数据库,使用点对点集群模式)。

hadoop搭建过程中遇到哪些问题

  1. Hadoop初始化错误

INFO org.apache.hadoop.ipc.Client: Retryingconnect to server: uec-fe/16.157.63.10:9000. Already tried 0 time(s).

这种情况对数出现在启动namenode时成功,但是运行job时就会一直连接。

通过查看TaskTracker日志可以看到不停地Retryingconnect,但是一直连不上,有如下解决办法:

  • 在启动hadoop前没有格式化namenode,需要再每次启动前格式化namenode
1
bin/hadoop namenode –format
  • 如果格式化后还存在相同的问题:需要先停掉hadoop,hadoop默认配置把一些文件放到/tmp 下,我们需要删除所有

    机器上的/tmp/hadoop-roor/(你的用户名)的文件,然后重新格式化后,启动服务。

  • 也可以自定义tmp文件的位置,编辑conf/core-site.xml文件

1
2
3
4
5
<property>
<name>hadoop.tmp.dir</name>
<value>/var/log/hadoop/tmp</value>
<description>Abase for other temporary directories</description>
</property>

关闭hadoop,格式化namenode之后启动hadoop

  • 还有种可能是由于/etc/hosts没有编辑造成的,更改后重启
  1. Your DataNodes won’t start, and you seesomething like this in logs/datanode:

解决办法:

bin/stop-all.sh rm–fr /tmp/hadoop-用户名 bin/hadoopnamenode -format bin/start-all.sh

  1. INFO hdfs.DFSClient: Exception increateBlockOutputStream java.io.IOException:Bad connect ack with firstBadLink192.168.30.149:50010

原因:可能有节点的防火墙开着,尝试关闭防火墙

/etc/init.d/iptables stop ###关闭防火墙

  1. org.apache.hadoop.dfs.SafeModeException:Cannot delete …, Name node is in safe mode

原因:hadoop的安全模式开启了,在分布式文件系统启动的时候,开始的时候会有安全模式,当分布式文件系统处于安全模式的情况下,文件系统中的内容不允许修改也不允许删除,直到安全模式结束。

安全模式主要是为了系统启动的时候检查各个DataNode上数据块的有效性,同时根据策略必要的复制或者删除部分数据块。运行期通过命令也可以进入安全模式。在实践过程中,系统启动的时候去修改和删除文件也会有安全模式不允许修改的出错提示,只需要等待一会儿即可

bin/hadoopd fs admin-safemode leave

  1. File/home/hadoop/tmp/mapred/system/jobtracker.info could only be replicated to 0nodes, instead of 1最常见的错误!!我是这样,

原因:当hadoop刚刚start-all时,datanode和namenode还没有进行连接,这个时候如果执行上传文件命令,会导致此命令,稍等一会问题就会解决,如果问题得不到解决,删除tmp/hadoop-你的用户名 文件重新格式化后启动。

  1. ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.net.UnknownHostException:hadoop149: hadoop149 atjava.net.InetAddress.getLocalHost(InetAddress.java:1426)。

原因:可能防火墙原因(关闭防火墙:/etc/init.d/iptables stop),也有可能是/etc/hosts文件没有添加相关信息 例如添加:192.168.30.149 hadoop149

重启hadoop

shell脚本

hadoop多台机器中执行同样的命令常用。

启动zookeeper

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#! /bin/bash

case $1 in
"start"){
for i in hadoop102 hadoop103 hadoop104
do
ssh $i "/opt/module/zookeeper-3.4.10/bin/zkServer.sh start"
done
};;
"stop"){
for i in hadoop102 hadoop103 hadoop104
do
ssh $i "/opt/module/zookeeper-3.4.10/bin/zkServer.sh stop"
done
};;
"status"){
for i in hadoop102 hadoop103 hadoop104
do
ssh $i "/opt/module/zookeeper-3.4.10/bin/zkServer.sh status"
done
};;
esac

用于调度执行的shell脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/bin/bash

# 定义变量方便修改
APP=gmall
hive=/opt/module/hive/bin/hive

# 如果是输入的日期按照取输入日期;如果没输入日期取当前时间的前一天
if [ -n "$1" ] ;then
do_date=$1
else
do_date=`date -d "-1 day" +%F`
fi

sql="
set hive.exec.dynamic.partition.mode=nonstrict;

insert overwrite table "$APP".dwd_start_log
PARTITION (dt='$do_date')
select
get_json_object(line,'$.mid') mid_id,
get_json_object(line,'$.uid') user_id,
get_json_object(line,'$.vc') version_code,
get_json_object(line,'$.vn') version_name,
get_json_object(line,'$.l') lang,
get_json_object(line,'$.sr') source,
get_json_object(line,'$.os') os,
get_json_object(line,'$.ar') area,
get_json_object(line,'$.md') model,
get_json_object(line,'$.ba') brand,
get_json_object(line,'$.sv') sdk_version,
get_json_object(line,'$.g') gmail,
get_json_object(line,'$.hw') height_width,
get_json_object(line,'$.t') app_time,
get_json_object(line,'$.nw') network,
get_json_object(line,'$.ln') lng,
get_json_object(line,'$.la') lat,
get_json_object(line,'$.entry') entry,
get_json_object(line,'$.open_ad_type') open_ad_type,
get_json_object(line,'$.action') action,
get_json_object(line,'$.loading_time') loading_time,
get_json_object(line,'$.detail') detail,
get_json_object(line,'$.extend1') extend1
from "$APP".ods_start_log
where dt='$do_date';
"

$hive -e "$sql"

vim命令

〇、显示行号
当前文件 命令模式输入 set nu

:set nu

一、跳到指定行
①在正常模式下输入ngg 或者 nG,n为指定的行数,如12gg或者12G 跳转到第12行.

使用 gg 跳转到当前文件的第一行

使用 G 跳转光标到当前文件的最后一行

②在命令模式下输入行号n
:n

③打开文件即跳转到指定行,行号n
vim +n FileName

hadoop搭建流程

https://www.aboutyun.com/thread-6487-1-1.html

mapreduce求topn的问题

链接:https://www.cnblogs.com/hdc520/p/12900854.html