分类目录归档:大数据

Eagle数据安全方案

Apache Eagle:分布式实时 Hadoop 数据安全方案

因为是ebay电商公司的开源,所以它更适合电商平台的使用。

———————————————————-
Eagle Architecture

数据流接入和存储(Data Collection and Storage)

Eagle 提供高度可扩展的编程API,可以支持将任何类型的数据源集成到Eagle的策略执行引擎中。例如,在Eagle HDFS 审计事件(Audit)监控模块中,通过Kafka来实时接收来自Namenode Log4j Appender 或者 Logstash Agent 收集的数据;在Eagle Hive 监控模块中,通过YARN API 收集正在运行Job的Hive 查询日志,并保证比较高的可伸缩性和容错性。

数据实时处理(Data Processing)

流 处理API(Stream Processing API)Eagle 提供独立于物理平台而高度抽象的流处理API,目前默认支持Apache Storm,但是也允许扩展到其他任意流处理引擎,比如Flink 或者 Samza等。该层抽象允许开发者在定义监控数据处理逻辑时,无需在物理执行层绑定任何特定流处理平台,而只需通过复用、拼接和组装例如数据转换、过滤、 外部数据Join等组件,以实现满足需求的DAG(有向无环图),同时,开发者也可以很容易地以编程地方式将业务逻辑流程和Eagle 策略引擎框架集成起来。Eagle框架内部会将描述业务逻辑的DAG编译成底层流处理架构的原生应用,例如Apache Storm Topology 等,从事实现平台的独立。

转:HDFS基本命令

HDFS基本命令:

hadoop fs -cmd

cmd: 具体的操作,基本上与UNIX的命令行相同

args:参数

HDFS资源URI格式

scheme://authority/path

scheme:协议名,file或hdfs

authority:namenode主机名

path:路径

示例:hdfs://localhost:9000/user/chunk/test.txt

假设已经在core-site.xml里配置了 fs.default.name=hdfs://localhost:9000,则仅使用/user/chunk/test.txt即可。

hdfs默认工作目录为 /user/$USER,$USER是当前的登录用户名。

HDFS命令示例:

hadoop fs -mkdir /user/trunk

hadoop fs -ls /user

hadoop fs -lsr /user   (递归的)

hadoop fs -put test.txt /user/trunk

hadoop fs -put test.txt .  (复制到hdfs当前目录下,首先要创建当前目录)

hadoop fs -get /user/trunk/test.txt . (复制到本地当前目录下)

hadoop fs -cat /user/trunk/test.txt

hadoop fs -tail /user/trunk/test.txt  (查看最后1000字节)

hadoop fs -rm /user/trunk/test.txt

hadoop fs -help ls (查看ls命令的帮助文档)

图中的2:文件备份数量,因为采用了两台机器的全分布模式,所以此处为2.对于目录,使用-。

在put的时候遇到问题:

  1. put: org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot create file/user/hadoopadmin. Name node is in safe mode.  

解法:>bin/hadoop dfsadmin -safemode leave
http://zkl-1987.iteye.com/blog/365587

有关HDFS的官方文档,可以参考如下网址:
http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/CommandsManual.html

Spark正确编译Jar包

Spark的插件,在配置jar包导出时,默认会把Hadoop及Scala等第三方库打包进JAR包,这会造成文件重复。从而导致各种错误,原因是JAR包中依赖与Spark运行环境的依赖文件重复导致加载错误,从而导致一些异常。a

 

a

转: Hadoop伪分布配置

一、      Hadoop伪分布配置

  1. 在conf/Hadoop-env.sh文件中增加:export JAVA_HOME=/home/Java/jdk1.6
  2. 在conf/core-site.xml文件中增加如下内容:

<!–  fs.default.name – 这是一个描述集群中NameNode结点的URI(包括协议、主机名称、端口号),集群里面的每一台机器都需要知道NameNode的地址。DataNode结点会先在NameNode上注册,这样它们的数据才可以被使用。独立的客户端程序通过这个URI跟DataNode交互,以取得文件的块列表。–>

 <property>

<name>fs.default.name</name>

<value>hdfs://localhost:9000</value>

</property>

<!—hadoop.tmp.dir 是hadoop文件系统依赖的基础配置,很多路径都依赖它。如果hdfs-site.xml中不配                     置namenode和datanode的存放位置,默认就放在这个路径中–>

<property>

<name>hadoop.tmp.dir</name>

<value>/home/hdfs/tmp</value>

</property>

  1. 在conf/hdfs-site.xml中增加如下内容:

<!– dfs.replication -它决定着 系统里面的文件块的数据备份个数。对于一个实际的应用,它 应该被设为3(这个           数字并没有上限,但更多的备份可能并没有作用,而且会占用更多的空间)。少于三个的备份,可能会影响到数据的         可靠性(系统故障时,也许会造成数据丢失)–>

<property>

<name>dfs.replication</name>

<value>1</value>

</property>

 

<!–  dfs.data.dir – 这是DataNode结点被指定要存储数据的本地文件系统路径。DataNode结点上            的这个路径没有必要完全相同,因为每台机器的环境很可能是不一样的。但如果每台机器上的这            个路径都是统一配置的话,会使工作变得简单一些。默认的情况下,它的值hadoop.tmp.dir, 这             个路径只能用于测试的目的,因为,它很可能会丢失掉一些数据。所以,这个值最好还是被覆                 盖。

dfs.name.dir – 这是NameNode结点存储hadoop文件系统信息的本地系统路径。这个值只对NameNode有效,DataNode并不需要使用到它。上面对于/temp类型的警告,同样也适用于这里。在实际应用中,它最好被覆盖掉。–>

<property>

<name>dfs.name.dir</name>

<value>/home/hdfs/name</value>

</property>

<property>

<name>dfs.data.dir</name>

<value>/home/hdfs/data</value>

</property>

 

 

<!—解决:org.apache.hadoop.security.AccessControlException:Permission                                                 denied:user=Administrator,access=WRITE,inode=”tmp”:root:supergroup:rwxr-xr-x 。

因为Eclipse使用hadoop插件提交作业时,会默认以 DrWho 身份去将作业写入hdfs文件系统中,对应的也就是 HDFS 上的/user/hadoop ,  由于 DrWho 用户对hadoop目录并没有写入权限,所以导致异常的发生。解决方法为:放开 hadoop 目录的权限, 命令如下 :$ hadoop fs -chmod 777 /user/hadoop –>

<property>

<name>dfs.permissions</name>

<value>false</value>

<description>

If “true”, enable permission checking in HDFS. If “false”, permission checking is turned                     off,   but all other behavior is unchanged. Switching from one parameter value to                                   the other does   not change the mode, owner or group of files or directories

</description>

 

</property>

 

  1. 在conf/mapred-site.xml中增加如下内容:

<!– mapred.job.tracker -JobTracker的主机(或者IP)和端口。–>

<property>

<name>mapred.job.tracker</name>

<value>localhost:9001</value>

</property>

二、操作命令

  1. 格式化工作空间

进入bin目录,运行 ./hadoop namenode –format

  1. 启动hdfs

进入hadoop目录,在bin/下面有很多启动脚本,可以根据自己的需要来启动。

* start-all.sh 启动所有的Hadoop守护。包括namenode, datanode, jobtracker, tasktrack

* stop-all.sh 停止所有的Hadoop

* start-mapred.sh 启动Map/Reduce守护。包括Jobtracker和Tasktrack

* stop-mapred.sh 停止Map/Reduce守护

* start-dfs.sh 启动Hadoop DFS守护Namenode和Datanode

* stop-dfs.sh 停止DFS守护

三、Hadoop hdfs 整合

     可按如下步骤删除和更改hdfs不需要的文件:

1.将hadoop-core-1.0.0.jar 移动到lib目录下。

  1. 将ibexec目录下的文件移动到bin目录下。
  2. 删除除bin、lib、conf、logs之外的所有目录和文件。
  3. 如果需要修改日志存储路径,则需要在conf/hadoop-env.sh文件中增加:

export    HADOOP_LOG_DIR=/home/xxxx/xxxx即可。

四、HDFS文件操作

Hadoop使用的是HDFS,能够实现的功能和我们使用的磁盘系统类似。并且支持通配符,如*。

  1. 查看文件列表

查看hdfs中/user/admin/hdfs目录下的文件。

  1. 进入HADOOP_HOME目录。
  2. 执行sh bin/hadoop fs -ls /user/admin/hdfs

查看hdfs中/user/admin/hdfs目录下的所有文件(包括子目录下的文件)。

  1. 进入HADOOP_HOME目录。
  2. 执行sh bin/hadoop fs -lsr /user/admin/hdfs
  3. 创建文件目录

查看hdfs中/user/admin/hdfs目录下再新建一个叫做newDir的新目录。

  1. 进入HADOOP_HOME目录。
  2. 执行sh bin/hadoop fs -mkdir /user/admin/hdfs/newDir
  3. 删除文件

删除hdfs中/user/admin/hdfs目录下一个名叫needDelete的文件

  1. 进入HADOOP_HOME目录。
  2. 执行sh bin/hadoop fs -rm /user/admin/hdfs/needDelete

删除hdfs中/user/admin/hdfs目录以及该目录下的所有文件

  1. 进入HADOOP_HOME目录。
  2. 执行sh bin/hadoop fs -rmr /user/admin/hdfs
  3. 上传文件

上传一个本机/home/admin/newFile的文件到hdfs中/user/admin/hdfs目录下

  1. 进入HADOOP_HOME目录。
  2. 执行sh bin/hadoop fs –put /home/admin/newFile /user/admin/hdfs/
  3.       下载文件

下载hdfs中/user/admin/hdfs目录下的newFile文件到本机/home/admin/newFile中

  1. 进入HADOOP_HOME目录。
  2. 执行sh bin/hadoop fs –get /user/admin/hdfs/newFile /home/admin/newFile
  3.       查看文件内容

查看hdfs中/user/admin/hdfs目录下的newFile文件

  1. 进入HADOOP_HOME目录。
  2. 执行sh bin/hadoop fs –cat /home/admin/newFile

hadoop单机配置

1.配置互信,否则在每次启动时,会要求输入密码,且这也是设置随机启动的必要条件。
$ ssh-keygen -t rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys

2.检验互信是否配置成功
$ ssh localhost
$ exit

3.解压haddop,以hadoop2.7.3版本为例,使其解压至/hadoop-2.7.3

4.编辑系统环境变量(vi /etc/profile),添加以下定义。
export HADOOP_HOME=/hadoop-2.7.3
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

5.编辑hadoop-env.sh启动环境文件(vim /hadoop-2.7.3/etc/hadoop/hadoop-env.sh),添加JAVA_HOME,如下。
export JAVA_HOME=/jdk1.8.0_101/

6.编辑core-site.xml文件( vim /hadoop-2.7.3/etc/hadoop/core-site.xml ),添加如下:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>

<!– fs.default.name – 这是一个描述集群中NameNode结点的URI(包括协议、主机名称、端口号),集群里面的每一台机器都需要知道NameNode的地址。DataNode结点会先在NameNode上注册,这样它们的数据才可以被使用。独立的客户端程序通过这个URI跟DataNode交互,以取得文件的块列表。–>

7.编辑hdfs-sizte.xml文件(vim /hadoop-2.7.3/etc/hadoop/hdfs-site.xml ),添加如下:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>

<property>
<name>dfs.name.dir</name>
<value>file:///root/hdfs/namenode</value> #等价于<value>/root/hdfs/namenode</value>
</property>

<property>
<name>dfs.data.dir</name>
<value>file:///root/hdfs/datanode</value>
</property>
</configuration>

<!– dfs.replication -它决定着 系统里面的文件块的数据备份个数。对于一个实际的应用,它 应该被设为3(这个数字并没有上限,但更多的备份可能并没有作用,而且会占用更多的空间)。少于三个的备份,可能会影响到数据的可靠性(系统故障时,也许会造成数据丢失)–>
<!– dfs.data.dir – 这是DataNode结点被指定要存储数据的本地文件系统路径。DataNode结点上的这个路径没有必要完全相同,因为每台机器的环境很可能是不一样的。但如果每台机器上的这个路径都是统一配置的话,会使工作变得简单一些。默认的情况下,它的值hadoop.tmp.dir, 这个路径只能用于测试的目的,因为,它很可能会丢失掉一些数据。所以,这个值最好还是被覆盖。
dfs.name.dir – 这是NameNode结点存储hadoop文件系统信息的本地系统路径。这个值只对NameNode有效,DataNode并不需要使用到它。上面对于/temp类型的警告,同样也适用于这里。在实际应用中,它最好被覆盖掉。–>

8.编辑mapred-site.xml(vim /hadoop-2.7.3/etc/hadoop/mapred-site.xml),添加如下:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
9.编辑yarn-site.xml(vim /hadoop-2.7.3/etc/hadoop/yarn-site.xml),添加如下:
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>

10.初始化HDFS
$ hdfs namenode -format

11.启动和停止
$ $HADOOP_HOME/sbin/start-all.sh
$ $HADOOP_HOME/sbin/stop-all.sh

12.检查相关节点启动。
http://localhost:8088
http://localhost:50070
http://localhost:50090
http://localhost:50075

● port 8088: cluster and all applications
● port 50070: Hadoop NameNode
● port 50090: Secondary NameNode
● port 50075: DataNode

spark单机版

根据以下步骤,建立单机版。
部署环境,也即主机,内存大于4G为宜,因为spark在执行一项任务时,至少会启动2个woker线程,每个节点为至少1G内存,这也就要求至少2G内存。如果再有HADOOP的话,4G内存是属于最低配置了。

1.配置单机互信,如果不配置,则在启动hadoop或spark的过程中,会要求输入密码,且“互信”是配置随机自启动的必要条件。
$ ssh-keygen -t rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys

2.Spark配置,假定spark安装在/spark-2.0.1目录下。
复制配置模板:cp /spark-2.0.1/conf/spark-env.sh.template /spark-2.0.1/conf/spark-env.sh
编辑它:vi /spark-2.0.1/conf/spark-env.sh,增加以下定义。
export JAVA_HOME=/jdk1.8.0_101/ #如果没有设置该项,会在启动过程中提示该项,甚至可能失败。
export SPARK_MASTER_HOST=192.168.239.137 #如果没有设置该项,则默认以SPARK_MASTER_HOST=”hostname” -f替代,且必须配置相应的hosts文件为ip,否则无法被外网访问。
export SPARK_WORKER_MEMORY=1G     #默认就是1G,不能小于1G,例如512M,它会资源不足的错误。
3.添加环境变量,vim /etc/profile,这个并非必要,只是为了方便直接调用脚本罢了。
export SPARK_HOME=/spark-2.0.1
export PATH=$SPARK_HOME/bin:$SPARK_HOME/sbin:$PATH

4.启动或停止Spark,为了防止与hadoop等其它脚本混淆,也可重命名它为spark-start-all
start-all.sh
stop-all.sh

5.重启(或source /etc/profile)并验证:
spark-submit –class=org.apache.spark.examples.SparkPi –master=spark://192.168.239.137:7077 /spark-2.0.1/examples/jars/spark-examples_2.11-2.0.1.jar
spark-submit –class=org.apache.spark.examples.LogQuery –master=spark://192.168.239.137:7077 /spark-2.0.1/examples/jars/spark-examples_2.11-2.0.1.jar