LOFTER for ipad —— 让兴趣,更有趣

点击下载 关闭

LOFTER-网易轻博

HBase

3331浏览    51参与
hdw2000
Saxon

Hbase增量导入导出

Cluster-A导出:

step1(导出到hdfs临时目录 /backup):

使用hbaseExport帮助:  hbase org.apache.hadoop.hbase.mapreduce.Export help

正则rowKey前缀匹配导出: hbase --config /tmp/hbase-client-conf org.apache.hadoop.hbase.mapreduce.Export safeclound.tb_ammeter /backup/tb_ammeter 1 1531843200000 1532016000000...

Cluster-A导出:

step1(导出到hdfs临时目录 /backup):

使用hbaseExport帮助:  hbase org.apache.hadoop.hbase.mapreduce.Export help

正则rowKey前缀匹配导出: hbase --config /tmp/hbase-client-conf org.apache.hadoop.hbase.mapreduce.Export safeclound.tb_ammeter /backup/tb_ammeter 1 1531843200000 1532016000000 ^11611119,ELE_P,119,01,201904


step2(从hdfsget到本地磁盘):

hdfs dfs -get /backup/tb_ammmeter /root/export-backup

step3(scp到Cluster-B ):

scp /root/export-backup/tb_ammeter cluster.b:/root/import-backup

Cluster-B导入:

step1(将本地磁盘数据文件上传至hdfs):

hdfs dfs -put  /root/export-backup/tb_ammeter /backup

step2(导入hbase表数据目录):

hbase org.apache.hadoop.hbase.mapreduce.Import safeclound.tb_ammeter /backup/tb_ammeter

注:

1. 前提条件,两个集群一定都要开启yarn资源调度服务,实际上都是通过MR任务export/import的;

2. 其中--config /tmp/hbase-client-conf参数表示可以临时指定hbase配置文件,默认可无需显示指定,因本人是使用的阿里云的EMR3.2(客户端配置存在bug),若不加--config直接使用配置将会报

Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hbase.ipc.controller.ServerRpcControllerFactory 的错误,EMR3.2错误解决请参考  阿里EMR3.2 hbase/phoenix配置BUG

参考文献1

源码参考:org.apache.hadoop.hbase.mapreduce.Export 的rowKey前缀匹配实现




Saxon

Apache Phoenix 映射已存在 HBase 表,查询不到数据

问题描述

按照网友提供的 phoenix 映射已存在的 hbase 表 demo 时,表映射正常,但是使用 phoenix 查询时,一直查询不到数据。

举个栗子:

1. hbase shell 插入数据

create 'test1','i'

put 'test1','1','i:name','zhangsan'

put 'test1','2','i:name','lisi'

put 'test1','1','i:age','15'

put 'test1','2','i:age','2'

hbase(main):006:0>...

问题描述

按照网友提供的 phoenix 映射已存在的 hbase 表 demo 时,表映射正常,但是使用 phoenix 查询时,一直查询不到数据。

举个栗子:

1. hbase shell 插入数据

create 'test1','i'

put 'test1','1','i:name','zhangsan'

put 'test1','2','i:name','lisi'

put 'test1','1','i:age','15'

put 'test1','2','i:age','2'

hbase(main):006:0> scan 'test1'

ROW                                          COLUMN+CELL

1                                           column=i:age, timestamp=1523416240312, value=15

1                                           column=i:name, timestamp=1523416227940, value=zhangsan

2                                           column=i:age, timestamp=1523416249281, value=2

2                                           column=i:name, timestamp=1523416234516, value=lisi

2. phoenix 创建表

  create table "test1"(

    pk VARCHAR PRIMARY KEY

    ,"i"."name" VARCHAR

    ,"i"."age" VARCHAR);

3.phoenix 查询,查询不到数据

0: jdbc:phoenix:> select * from "test1";

+-----+-------+------+

| PK  | name  | age  |

+-----+-------+------+

+-----+-------+------+

No rows selected (0.238 seconds)

4. 问题原因 

经过阅读官方文档发现,phoenix 4.10 版本后,对列映射做了优化,采用一套新的机制,不在基于列名方式映射到 hbase。

解决办法:

1.如果只做查询,强烈建议使用 phoenix 视图方式映射,删除视图不影响 hbase 源数据,语法如下:

create view "test1"(

    pk VARCHAR PRIMARY KEY

    ,"i"."name" VARCHAR

    ,"i"."age" VARCHAR);

2. 必须要表映射,需要禁用列映射规则(会降低查询性能),如下:

  create table "test1"(

    pk VARCHAR PRIMARY KEY

    ,"i"."name" VARCHAR

    ,"i"."age" VARCHAR)

column_encoded_bytes=0;

官方资料参考:http://phoenix.apache.org/columnencoding.html


亲测可用解决方案: 

在创建表时禁用Phoenix4.10的新特性(禁用对字段值进行压缩编码),如:

create table "safeclound"."tb_elec_power"("ROW" varchar primary key, "info"."activeA" varchar) COLUMN_ENCODED_BYTES=0;


这样就能查出数据了,另外,根据官方文档的内容,“One can set the column mapping property only at the time of creating the table. ”,也就是说只有在创建表的时候才能够设置属性。如果在创建的时候没有设置,之后怎么去设置就不太清楚了,可能是无法改变,至少目前我还没有找到相关方法。所以大家在创建映射表的时候一定要注意设置属性。


Saxon

物联网云平台大数据环境搭建

一、环境软件说明:

        1、依赖safecloud测试环境搭建(hadoop-2.7.2+hbase-1.2.5+phoenix-4.7.0+zookeeper-3.4.6+kafka_2.10-0.10.2.0+spark-2.0.0-bin-hadoop2.7+scala-2.11.8)

        2、注,各小版本的兼容问题;...


一、环境软件说明:

        1、依赖safecloud测试环境搭建(hadoop-2.7.2+hbase-1.2.5+phoenix-4.7.0+zookeeper-3.4.6+kafka_2.10-0.10.2.0+spark-2.0.0-bin-hadoop2.7+scala-2.11.8)

        2、注,各小版本的兼容问题;

              phoenix-4.10.0-HBase-1.2-bin 的版本与 phoenix-4.7.0-HBase-1.1-bin.tar是有区别的,当用前者版本插入的数据,在hbase中的列展示为字节,而后者版插入的数据在hbase中列展示位文本;所以插入数据的 Phoenix版本跟查询用的Phoenix版本一定要一致。(此问题曾经一个程序猿累死累活)

        3、阿里云EMR版本依赖题外资料参考(可忽略):

apache-hive-2.0.1-bin

apache-storm-1.0.1

hadoop-2.7.2

hbase-1.1.1

oozie-4.2.0

phoenix-4.7.0-HBase-1.1-bin

pig-0.14.0

presto-server-0.147

spark-2.0.2-bin-hadoop2.7

sqoop-1.4.6

tez-0.8.4

zeppelin-0.6.2-bin-all

zookeeper-3.4.6

二、环境安装:

1、编辑 vim /etc/hosts 将集群机器映射好(若是VPC网络的机器是没有固定公网IP的网卡的,使用内网地址绑定即可);  (重要的事情说三遍!!!)

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

172.16.53.143 safecloud-master

2、解压所有需安装软件包:

[root@safecloud-master apps]# tar -xvf hbase-1.2.5.tar

[root@safecloud-master apps]# tar -xvf kafka_2.10-0.10.2.0.tar

[root@safecloud-master apps]# tar -xvf scala-2.11.8.tar

[root@safecloud-master apps]# tar -xvf spark-2.0.0-bin-hadoop2.7.tar

[root@safecloud-master apps]# tar -xvf zookeeper-3.4.6.tar

[root@safecloud-master apps]# tar -xvf hadoop-2.7.2.tar

3、建立所有安装软件软链(学习阿里云EMR,可选,好处是更换安装包版本时不需改环境变量配置,只需改软链即可)

[root@safecloud-master apps]# ln -s /opt/apps/hbase-1.2.5/ /usr/lib/hbase-current

[root@safecloud-master apps]# ln -s /opt/apps/kafka_2.10-0.10.2.0/ /usr/lib/kafka-current

[root@safecloud-master apps]# ln -s /opt/apps/scala-2.11.8/ /usr/lib/scala-current

[root@safecloud-master apps]# ln -s /opt/apps/spark-2.0.0-bin-hadoop2.7/ /usr/lib/spark-current

[root@safecloud-master apps]# ln -s /opt/apps/zookeeper-3.4.6/ /usr/lib/zookeeper-current

[root@safecloud-master apps]# ln -s /opt/apps/hadoop-2.7.2/ /usr/lib/hadoop-current

查看软件创建的结果:

[root@safecloud-master apps]# cd /usr/lib/

[root@safecloud-master apps]# ll

4、配置环境变量(结合第3步,后续升级扩展性更好):

[root@safecloud-master apps]# vim /etc/bashrc

a、追加环境变量:

export JAVA_HOME=/usr/java/jdk1.8.0_162

export JRE_HOME=/usr/java/jdk1.8.0_162/jre

export CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib

export SCALA_HOME=/usr/lib/scala-2.11.8

export SPARK_HOME=/usr/lib/spark-current

export HADOOP_HOME=/usr/lib/hadoop-current

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"

export HBASE_HOME=/usr/lib/hbase-current

export HBASE_BIN=$HBASE_HOME/bin

export PHOENIX_HOME=/usr/lib/phoenix-current

export KAFKA_HOME=/usr/lib/kafka-current

export ZOOKEEPER_HOME=/usr/lib/zookeeper-current

export PATH=$PATH:$HOME/bin:$SCALA_HOME/bin:$SPARK_HOME/sbin:$HADOOP_HOME/bin:$KAFKA_HOME/bin:$ZOOKEEPER_HOME/bin:$PHOENIX_HOME/bin:$HBASE_HOME:$HBASE_BIN:./

b、即立即生效

[root@safecloud-master apps]# source /etc/bashrc

c、退出当前SSH登录会话(因为当前SSH会话会缓存老的环境变量,在启动服务时可能出问题)

[root@safecloud-master apps]# exit

5、先安装zookeeper(kafka、hbase等都依赖它)

a、修改zookeeper主要配置

[root@safecloud-master apps]# cd /usr/lib/zookeeper-current/conf

[root@safecloud-master apps]# mv  zoo_sample.cfg zoo.cfg

[root@safecloud-master apps]# vim zoo.cfg

dataDir=/mnt/disk1/zookeeper/data

dataLogDir=/mnt/disk1/zookeeper/logs

clientPort=3181    #如果需要修改的话

b、启动zookeeper服务

[root@safecloud-master apps]# cd ../bin          (推荐,因zk有个小坑,日志文件会生成在执行zkServer.sh时的目录)

[root@safecloud-master apps]# ./zkServer.sh start

6、再安装kafka

a、修改kafka主要配置

[root@safecloud-master apps]# vim /usr/lib/kafka-current/config/server.properties

############################# Log Basics #############################

# A comma seperated list of directories under which to store log files

log.dirs=/mnt/disk1/kafka/kafka-logs

############################# Zookeeper #############################

# Zookeeper connection string (see zookeeper docs for details).

# This is a comma separated host:port pairs, each corresponding to a zk

# server. e.g. "127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002".

# You can also append an optional chroot string to the urls to specify the

# root directory for all kafka znodes.

zookeeper.connect=safecloud-master:3181

# Timeout in ms for connecting to zookeeper

zookeeper.connection.timeout.ms=6000

host.name=safecloud-master    #注意:一定要与 /etc/hosts 对应

b、启动kafka(因有环境变量可直接使用启动脚本)

[root@safecloud-master apps]# kafka-server-start.sh -daemon /usr/lib/kafka-current/config/server.properties

7、再安装hbase+phoenix

a、因phoenix服务端是以jar包形式内嵌hbase中的,所以直接拷贝phoenix相关jar至hbase/lib

[root@safecloud-master apps]# cp /usr/lib/phoenix-current/phoenix-4.7.0-HBase-1.1-server.jar /usr/lib/hbase-current/lib

b、修改hbase配置文件

[root@safecloud-master apps]# cd /usr/lib/hbase-current/conf/

[root@safecloud-master apps]# vim hbase-env.sh

# Tell HBase whether it should manage it's own instance of Zookeeper or not.

export HBASE_MANAGES_ZK=false    #显示关闭hbase自带zk,伪集群或集群时必须以此配置

[root@safecloud-master apps]# vim hbase-site.xml

配置主要hbase:

<configuration>

        <!-- ========Basic Settings======== -->

        <!--<property>

                        <name>hbase.rootdir</name>

           <value>hdfs://emr-cluster/hbase</value>

        </property>-->

        <!-- 在集群或伪集群模式下必须设置true -->

        <property>

                <name>hbase.cluster.distributed</name>

                <value>true</value>

        </property>

        <!-- HMaster启动监听绑定的IP,推荐设置为监听所有(0.0.0.0表示所有网卡IP),因为如果是VPC网络的服务器则是没有公网IP网卡的 -->

        <property>

                <name>hbase.master.ipc.address</name>

                <value>0.0.0.0</value>

        </property>

        <!-- 集群模式时显示指定外部zk,多个以逗号隔开 -->

        <property>

                <name>hbase.zookeeper.quorum</name>

                <value>safecloud-master:3181,safecloud-worker1:3181,safecloud-worker2:3181</value>

        </property>

        <property>

                <name>zookeeper.znode.parent</name>

                <value>/hbase</value>

        </property>

        <property>

                <name>hbase.zookeeper.property.dataDir</name>

                <value>/mnt/disk1/hbase-zk/data</value>

        </property>

        <property>

                <name>zookeeper.session.timeout</name>

                <value>90000</value>

        </property>

</configuration>

c、其他配置文件说明

/usr/lib/hbase-current/conf/regionservers    表示配置slave节点,完全集群模式下必须指定,(启动master时会自动启动slave,暂未这样测试)

d、启动hbase服务(因有环境变量则直接使用启动脚本)

[root@safecloud-master apps]# start-hbase.sh

[root@safecloud-master apps]# jps

11578 HMaster

11727 HRegionServer

2364 QuorumPeerMain

2669 Kafka

若出现HMaster、HRegionServer则表示hbase启动成功。

8、再安装spark

a、配置spark配置文件

[root@safecloud-master apps]# cd /usr/lib/spark-current/conf

[root@safecloud-master conf]# cp spark-env.sh.template spark-env.sh

[root@safecloud-master conf]# cp slaves.template slaves

[root@safecloud-master conf]# vim slaves

# A Spark Worker will be started on each of the machines listed below.

#localhost

safecloud-master    #将localhost注释,添加从机列表

[root@safecloud-master conf]# vim spark-env.sh

# 添加hadoop相关classpath,貌似不用陪也能跑

SPARK_DIST_CLASSPATH=$(/usr/lib/hadoop-current/bin/hadoop classpath)

b、启动spark主服务

[root@safecloud-master conf]# ./usr/lib/spark-current/sbin/start-all.sh

[root@safecloud-master apps]# jps

11578 HMaster

11727 HRegionServer

2364 QuorumPeerMain

2669 Kafka

12152 Master

12250 Worker

若出现Master、Worker则表示hbase启动成功。

c、提交一个spark-submit任务(消费kafka中所有主题的数据)

# 创建一个任务的目录

[root@safecloud-master conf]# mkdir -p /usr/lib/spark-current/work/consumer-topics

[root@safecloud-master work]# cd /usr/lib/spark-current/work/consumer-topics

[root@safecloud-master consumer-topics]# vim  start-submit.sh

#export logpath=$(cd "`dirname "$0"`"/..; pwd)/customer-topics.out

nohup ../../bin/spark-submit --master local --deploy-mode client --jars kafka2hbase-0.0.1-SNAPSHOT-jar-with-dependencies.jar --class com.sm.stream.Consumer kafka2hbase.jar localhost:3181 localhost:3181 spark-stream-test safeclound_air,safeclound_smoke,safeclound_ray,safeclound_atmos,safeclound_water,safeclound_hum,safeclound_elec_power_facter,safeclound_elec_power,safeclound_elec_phase_v,safeclound_elec_phase_i,safeclound_elec_line_v,safeclound_elec_freq,safeclound_demand,safeclound_freq_rate,safeclound_phase_v_rate,safeclound_rate_v,safeclound_rate_i,safeclound_harmonic_v,safeclound_harmonic_i,safeclound_water_njyc,safeclound_ammeter,safeclound_heartbeat,safeclound_door_ctrl,safeclound_co1,safeclound_pump_controller,safeclound_ggj_controller,safeclound_compensation_module,safeclound_hcho,safeclound_tvoc,safeclound_co2,safeclound_largestDemand,safeclound_lineTemperature 3 >/mnt/disk1/spark-log/consumer-topics.out 2>&1 &

:wq保存

启动参数说明:   kafka2hbase.jar  kafkaZk列表  hbaseZk列表  kafka组ID  主题列表  线程数

[root@safecloud-master consumer-topics]# chmod 700 start-submit.sh

[root@safecloud-master consumer-topics]# ./start-submit.sh    #启动spark任务

[root@safecloud-master consumer-topics]# jps

11578 HMaster

11727 HRegionServer

2364 QuorumPeerMain

2669 Kafka

12152 Master

12250 Worker

16889 SparkSubmit

若出现SparkSubmit则表示spark任务启动成功。

d、查看日志:

[root@safecloud-master consumer-topics]# tail -f /mnt/disk1/spark-log/consumer-topics.out

e、kafka2hbase.jar 源码参考

http://wang4ever.lofter.com/post/1cca927e_12646c79

云盘:https://pan.baidu.com/s/1xloEbdsRp4fIvVSvdlUU3A


9、设置所有服务开机自启动

[root@safecloud-master ~]# vim /etc/rc.local

cd /usr/lib/zookeeper-current/bin

./zkServer.sh start


cd /usr/lib/kafka-current/bin

./kafka-server-start.sh -daemon ../config/server.properties


/usr/lib/hbase-current/bin/start-hbase.sh


cd /usr/lib/spark-current/sbin

./start-all.sh


cd /usr/lib/spark-current/work/consumer-topics

./start-submit.sh


cd /opt/apps/tomcat8-dataopen

./bin/startup.sh



至此,大数据云平台的基础设施就已搭建好了。


雷波光年

Hbase-前缀匹配查询

在使用sacn命令时,有时候要用到模糊查询,在网上很少关于这方面的资料,大多数都是通过java或其他语言实现,对于java不熟悉的人,通过shell命令来操作hbase相对来说较为简单。如下:

按 rowkey 模糊查询(最左前缀匹配)总行数:下面的例子会统计 r1* 的总行数:

scan 'wyk_temp',{FILTER => org.apache.hadoop.hbase.filter.PrefixFilter.new(org.apache.hadoop.hbase.util.Bytes.toBytes('r1'))}

过滤器filter有两种方法指出:
1. Using...

在使用sacn命令时,有时候要用到模糊查询,在网上很少关于这方面的资料,大多数都是通过java或其他语言实现,对于java不熟悉的人,通过shell命令来操作hbase相对来说较为简单。如下:

按 rowkey 模糊查询(最左前缀匹配)总行数:下面的例子会统计 r1* 的总行数:

scan 'wyk_temp',{FILTER => org.apache.hadoop.hbase.filter.PrefixFilter.new(org.apache.hadoop.hbase.util.Bytes.toBytes('r1'))}

过滤器filter有两种方法指出:
1. Using a filterString – more information on this is available in the Filter Language document attached to the HBASE-4176 JIRA
2. Using the entire package name of the filter.

-- 与pro相同的查询语句
echo "scan 'batchtb',{STARTROW=>'APP1002_DOC_LS0200010170104324', FILTER=>org.apache.hadoop.hbase.filter.PrefixFilter.new(org.apache.hadoop.hbase.util.Bytes.toBytes('APP1002_DOC_LS0200010170104324'))}" | hbase shell

echo "scan 'batchtb',{STARTROW=>'APP1009_DOC_0000000000YH000018201705170003', FILTER=>org.apache.hadoop.hbase.filter.PrefixFilter.new(org.apache.hadoop.hbase.util.Bytes.toBytes('APP1009_DOC_0000000000YH000018201705170003'))}" | ./hbase shell


Saxon

Phoenix实用SQL查询HBase客户端

HBase,一个NoSQL数据库,可存储大量非关系型数据。

HBase,可以用HBase shell进行操作,也可以用HBase Java api进行操作。HBase虽然是一个数据库,但是它的查询语句,很不太好用。要是能像使用Mysql等关系型数据库一样用sql语句操作HBase,那就很Perfect了。

现有工具有很多Hive,Tez,Impala,Shark/Spark,Phoenix等。今天主要记录Phoenix。

phoenix,由saleforce.com开源的一个项目,后又捐给了Apache。它相当于一个Java中间件,帮助开发者,像使用jdbc访问关系型数据库一些,访问NoSql...

HBase,一个NoSQL数据库,可存储大量非关系型数据。

HBase,可以用HBase shell进行操作,也可以用HBase Java api进行操作。HBase虽然是一个数据库,但是它的查询语句,很不太好用。要是能像使用Mysql等关系型数据库一样用sql语句操作HBase,那就很Perfect了。

现有工具有很多Hive,Tez,Impala,Shark/Spark,Phoenix等。今天主要记录Phoenix。

phoenix,由saleforce.com开源的一个项目,后又捐给了Apache。它相当于一个Java中间件,帮助开发者,像使用jdbc访问关系型数据库一些,访问NoSql数据库HBase。

phoenix,操作的表及数据,存储在hbase上。phoenix只是需要和Hbase进行表关联起来。然后再用工具进行一些读或写操作。

其实,可以把Phoenix只看成一种代替HBase的语法的一个工具。虽然可以用java可以用jdbc来连接phoenix,然后操作HBase,但是在生产环境中,不可以用在OLTP中。在线事务处理的环境中,需要低延迟,而Phoenix在查询HBase时,虽然做了一些优化,但延迟还是不小。所以依然是用在OLAT中,再将结果返回存储下来。

 

Phoenix官网上,对Phoenix讲解已经很屌了。如果英语好,可以看官网,更正式一些。

 

Phoenix安装1、 下载phoenix

phoenix与HBase版本对应关系

Phoenix 2.x - HBase 0.94.x

Phoenix 3.x - HBase 0.94.x

Phoenix 4.x - HBase 0.98.1+

我目前测试使用版本概况:

Hadoop1.0.4

HBase0.94.18

所以我可以用phoenix2.x,phoenix3.x。

官网download页面有

我选用的是phoenix3.1.0版本。

2、上传到主节点linux就ok了,解压缩

tar –zxvf phoenix.tar.gz

pwd

/root/phoenix

ll phoenix

  

phoenix目录结构可能会有点不同,主要是bin目录的位置,可能在hadoop1下,也可能直接在 /root/phoenix下。没关系,都差不多。

3、拷贝一些文件

既然用的hadoop1.x集群,那么我们使用phoenix目录下,hadoop1目录下的内容。

①将hadoop1下,phoenix-core-3.x.jar拷贝到hadoop集群各个节点HBase的lib目录下。

②重启一下HBase

4、验证是否安成功

在主节点上,切换到/root/phoenix/hadoop1/bin目录下

输入 ./sqlline.py master:2181

如果出现这个画面,那就是成功了。如果不成功,可能是zookeeper配置的有一些问题吧。

好吧,先退出此界面,输入!quit回车然后就可以退出了。

这个phoenix挺有意思,有一些命令需要输入叹号的!

 

phoenix的使用

mysql的话,可以CLI命令行的方式操作;可以通过用jdbc,在Java代码中访问;可以通过用SQLyog进行访问管理;

phoenix,怎么用呢?~可以看成是mysql。Phoenix可以在CLI下操作;可以用jdbc操作;可以用phoenix的一个客户端工具Squirrel 访问;

先说Squirrel吧,这个简单一些。

Squirrel SQL Client,是一个连接数据库的客户端工具。一般支持JDBC的数据库都可以用它来连接。(如Squirrel连接Mysql)

下载Squirrel SQL Client,解压缩就可以了。运行squirrel-sql.bat就出现了图形界面。

这肯定要说怎样连Phoenix?

①在Squirrel安装目录的lib下,添加几个jar包

a,phoenix-core-xxx.jar

b,phoenix-3.0-client.jar

c,hbase-0.94.18.jar

d,hadoop1.0.4.jar

e,hadoop-common-xxx.jar

需要点击“Drivers”,将phoenix的驱动添加进去。

③点击左上角 蓝色的 “ + ” 加号,添加

按上面的顺序,依次填写。第一步Name:随便写个名字,标记连接;第二步Example URL:相当于mysql的jdbc连接串,这里的alias写zookeeper的主机名称,端口号,可以写,可以不写,我一般不写;第三步选择Phoenix-core的jar包;第四步就是手动输入org.apache.phoenix.jdbc.PhoenixDriver。

然后点击OK。

④配置连接

Name:为随便起的名称。

Driver:选中③中添加的phoenix驱动。

URL:写如上内容,jdbc:phoenix:node1,node2,master等这里主要是zookeeper主机名。

User Name:要连接的主机的用户名

Password:要连接的主机的密码

点击Test可以进行测试,或点OK连接。

连接完毕,启动后,就可以看到如下的效果了。这里我已经创建了几个表了,这些表都是存在于HBase上的。

Squirrel的一些布局简介:

1,用squirrel建立的一些连接

2,当前连接下,所有对象,包括主见系统表,普通表,视图。

3,为表,这些表都是实际存在于zookeeper所管理的HBase上的。右键此表,可以对表进行管理。

4,为视图。

5,编写sql脚本的地方,可以输入脚本执行。脚本执行方式,在5上面有一个小人,选中sql,点击小人就可以执行了。或者按ctrl + enter键,执行。

6,为选中的对象的一些基本信息,列信息,行数等。

7,为sql执行的一些状态。

下面在Squirrel中创建一个表

在Squirrel中创建表的过程主要是编写sql,进行执行。sql该怎么写,需要看phoenix驱动都支持什么效果。

这需要看phoenix的官网了。

需要注意的是phoenix是区分大小写的,自己定义的HBase中的 HTableName,ColumnFamily,以及字段Column,需要和Phoenix中保持一致。

phoenix操作hbase,我们有两种方式,创建表,创建视图。

这两种方式,有区别。

比如,创建表的话,就可以对HBase进行插入,查询,删除操作。视图的话,一般就只可以进行查询操作

虽然看起来,表的功能,比视图更强大一些。但是就像是mysql等关系型数据库一样,删除表操作,会将表删掉。但是删除视图操作,却不会影响原始表的结构。

因为使用phoenix,创建表后,会自动和hbase建立关联映射。当你使用phoenix删除和hbase之间的关系时,就会将hbase中的表也删掉了

所以用视图,会对原始的HBase表影响小一些。

phoenix可以创建表,

若hbase中,不存在HTable:

create htablename (

pk VARCHAR primary key not null,

col1 VARCHAR null,

col2 VARCHAR null,

col3 VARCHAR null

)

create htablename2(

pk VARCHAR primary key null,

"cf"."col1" VARCHAR null,

"cf"."col2" VARCHAR null,

"cf2"."col3" VARCHAR null,

"cf2"."col4" VARCHAR null,

)

上面的SQL脚本,可以在SQuirreL中进行执行,执行过程中,如果出现错误,会在工具的下面进行提示。若成功后,就可以在HBase中看到这个表了。

若Hbase中,已存在名为htablename3的HTable,那么SQuirrel是不会直接显示出hbase中这个已存在的表的,我们还需要额外做一些操作。

在SQuirreL中进行执行,执行完毕后,就会将HBase的htablename3,映射到SQuirreL中。这样我们就可以在Java api中进行操作了。否则是不可以的。

那么需要哪些具体操作呢?其实很简单,我当时没想到

就像创建表一样,使用Create table就可以了。就这样简单。

不过这个语句怎么写呢?怎样对应呢?

create htablename3(

pk VARCHAR primary key null,       -------这句话直接写就可以了,这样的话,HBase中的RowKey转换成phoenix中的主键,列名就叫 pk。rowkey自动会和primary key进行对应。

"cf"."col1" VARCHAR null,             -------将名为cf的columnFamily下,字段名为col1的字段,写在这里。

"cf"."col2" VARCHAR null,            -------将名为cf的columnFamily下,字段名为col2的字段,写在这里。。。下面就以此类推

"cf2"."col3" VARCHAR null,

"cf2"."col4" VARCHAR null,

)

然后在SQuirreL中执行,然后就可以看到数据了。

不过此时,可能还会有问题,乱码。 在SQuirrel中,主键以及一些包含汉字的字段,都是方块等乱码了。这个怎么解决???

创建试图

CREATE VIEW "heihei"

(pk VARCHAR primary key)

default_column_family = 'FM'

创建完成后,这里的“heihei” 是HBase中table的名称。然后定义一个主键,就可以了。

创建视图

①CREATE VIEW "DAMAI" ( PK VARCHAR PRIMARY KEY) DEFAULT_COLUMN_FAMILY='FM'

这里双引号内的 “DAMAI” 和HBase中的表名是一样的,所以会自动关联。

那么,如果想针对HBase中的一个表,建多个视图呢?

②第二种视图,可以在Phoenix table的基础上创建。

CREATE VIEW my_VIEW (new_col VARCHAR,new_col2 VARCHAR) AS SELECT * FROM phoenix_Table WHERE ......

③第三种视图,是建立在视图之上,

CREATE VIEW my_VIEW_ON_VIEW AS SELECT * FROM MY_VIEW WHERE ......

所以说,在创建DAMAI视图的时候,可以将全部字段都包括进来。然后再在此视图基础上,创建其它视图。

随着数据的增长,视图中可以看到的数据的条数,也在同步增加。

 

使用命令查看一下视图中的数据

select * from damai   这时可以用大小写都行了。没有区分

查询结果现在,只有一列。看来是创建视图时,没有关联好其他列。没关系,删掉,重建。

 

Phoenix中的语法

Phoenix中的数据类型

Phoenix中的方法

我自己使用过程中一些简单语句,如下:

select * from shuju;

select count(1) from shuju;

select cmtid,count(1) as num from shuju group by cmtid order by num desc;

select avg(TO_NUMBER(avgt)) from shuju;

select cmtid,count(1) as num,avg(TO_NUMBER(avgt)) as avgt,avg(TO_NUMBER(loss)) as loss from shuju group by cmtid order by num desc;

select acm,dtype,cmtid,count(1) as num,avg(TO_NUMBER(avgt)) as avgt,avg(TO_NUMBER(loss)) as loss

from shuju

group by acm,dtype,cmtid

order by num desc;

select acm,dtype,porgcode,orgid,cmtid,count(1) as num,avg(TO_NUMBER(avgt)) as avgt,avg(TO_NUMBER(loss)) as loss

from shuju

group by acm,dtype,porgcode,orgid,cmtid

order by num desc;

where TO_DATE(ttime,'yyyyMMddHHmmss')=TO_DATE('20141125','yyyyMMdd')

select ttime from shuju order by ttime desc;

 

where TO_DATE(ttime,'yyyyMMddHHmmss')=TO_DATE('20141125','yyyyMMdd')

 

select TO_DATE(ttime,'yyyyMMddHHmmss') from shuju;

select TO_DATE('20141125','yyyyMMdd') from shuju;

select (TO_DATE(ttime,'yyyyMMddHHmmss')=TO_DATE('20141125','yyyyMMdd')) as aaa from shuju order by aaa asc;

 

用SHELL命令来操作phoenix

用SHELL来操作phoenix,不太好用。无助的时候,你可以喊救命!So,Say Help Help Help

./sqlline.py master:2181

进入shell后,输入help

可以看到很多命令,前面都带了一个叹号。根据意思自己猜一猜功能,然后试一试效果,就可以了。不记录了。

 

用Phoenix Java api操作HBase

这个过程就想是JDBC一样使用就可以了。

①先将phoenix的 core.jar包 和 phoenix的client.jar 包放到lib里。

②创建连接,过程和mysql类似

public Connection GetConnection(){
Connection cc = null;
String driver = "org.apache.phoenix.jdbc.PhoenixDriver";
//String url = "jdbc:phoenix:192.168.206.21:2181";

try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}

if (cc == null) {
try {
cc = DriverManager.getConnection(url);
} catch (SQLException e) {
e.printStackTrace();
}
}
return cc;
}

OK 搞定了。


Squirrel下载地址:http://pan.baidu.com/s/1jI3iCMq

THB

基于spark的实时流数据需跟历史数据进行对比时所遇到的问题

(注:在csdn上也发表过该文章....还是喜欢lofter的风格,但csdn能解决问题...)

环境:

HDP-2.3

Hadoop 2.7.1.2.3

HBase 1.1.1.2.3

Spark 1.4.1.2.3

Kafka 0.8.2.2.3

Solr 5.3.0


项目需求:

实时的流数据需要和每个用户前一个数据进行比较,得出值是否相同。


方案1:

只有一个spark streaming的任务,在该任务中,Spark streaming从Kafka中获取到数据后进行数据清洗,将清洗后的数据存入HBase。再对该DStream进行map,根据用户ID到HBase...

(注:在csdn上也发表过该文章....还是喜欢lofter的风格,但csdn能解决问题...)

环境:

HDP-2.3

Hadoop 2.7.1.2.3

HBase 1.1.1.2.3

Spark 1.4.1.2.3

Kafka 0.8.2.2.3

Solr 5.3.0


项目需求:

实时的流数据需要和每个用户前一个数据进行比较,得出值是否相同。


方案1:

只有一个spark streaming的任务,在该任务中,Spark streaming从Kafka中获取到数据后进行数据清洗,将清洗后的数据存入HBase。再对该DStream进行map,根据用户ID到HBase中查找上一时刻的值并进行比对,如果不相同则保留,相同则设置为空之后filter掉。

问题:

在执行前3~5次是成功的,之后就不继续进行了,猜想可能是HBase的性能造成的影响,不过根据http://www.jdon.com/46128这篇帖子的性能比较,我们的项目需要同时读写操作,所以HBase还是比较适合的,只能换Spark算法。


方案2:

第一个spark streaming任务实时将数据写入HBase,第二个spark批处理任务每隔一段时间对HBase进行一次批处理。

HBase的原始数据表以用户ID作为行健,时间作为列,需要对比的数据作为值,只有一个列簇。

问题:

任务成功,但执行时间过长,当HBase表中数据增加时,任务执行时间明显增加。


方案3:

在方案2的基础上进行改进,在第二个spark批处理任务执行的过程中,将本次每行的列的长度记录在HBase表的第二个列簇中,供下个任务使用。

问题:

任务执行时间还是没有减少。


方案4:

在方案2的基础上进行改进,在第二个spark批处理任务执行的过程中,将除了最后一位值的其他列全部删除,减小HBase表的大小。

问题:

只有少量数据的时候HBase也会遇到请求失败,无法访问所有表,该方法不成功。


方案5:

在方案3的基础上进行改进,在第一个Spark streaming任务中通过Solr对HBase进行实时增量索引供第二个spark批处理任务查询使用,还未测试。(目前遇到的问题是solr的scala API还没有调试完成)

大数据技术博客

Could not locate executable null\bin\winutils.exe

在window下调试Hadoop,查询hbase表数据时。报错

Could not locate executable null\bin\winutils.exe

解决办法为在程序开始加入以下代码:

File workaround = new File("."); 

        System.getProperties().put("hadoop.home.dir", workaround.getAbsolutePath()); ...


在window下调试Hadoop,查询hbase表数据时。报错

Could not locate executable null\bin\winutils.exe

解决办法为在程序开始加入以下代码:

File workaround = new File("."); 

        System.getProperties().put("hadoop.home.dir", workaround.getAbsolutePath()); 

        new File("./bin").mkdirs();         new File("./bin/winutils.exe").createNewFile();

刷新工程,再次运行程序,此问题完美解决。

zhangjinlong87

HBase 0.96.0 的数据导入: 利用ImportTsv,completebulkload,I

记录一下HBase 0.96.0 利用ImportTsv,completebulkload 和Import导入数据的方法。我的环境里用的是Yarn。

1、利用ImportTsv 将cvs文件导入到HBase

步骤:

a. 在hbase里面创建好table: 

命令:create 'hbase-tbl-001','cf'

b. Upload simple1.cvs文件到hdfs上面,其内容为:

1,"tom"
2,"sam"
3,"jerry"
4,"marry"
5,"john"

c...

记录一下HBase 0.96.0 利用ImportTsv,completebulkload 和Import导入数据的方法。我的环境里用的是Yarn。

1、利用ImportTsv 将cvs文件导入到HBase

步骤:

a. 在hbase里面创建好table: 

命令:create 'hbase-tbl-001','cf'

b. Upload simple1.cvs文件到hdfs上面,其内容为:

1,"tom"
2,"sam"
3,"jerry"
4,"marry"
5,"john"

c. 利用ImportTsv导入数据:

命令:bin/hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator="," -Dimporttsv.columns=HBASE_ROW_KEY,cf hbase-tbl-001 /user/biadmin/simple1.cvs

ImportTsv 任务执行结果:

在Yarn的web console上可以看到相应job的执行记录:


hbase的hbase-tbl-001'的值为:



2、利用completebulkload 将数据导入到HBase

a. 先通过ImportTsv生成HFile

命令:bin/hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator="," -Dimporttsv.bulk.output=hfile_tmp3 -Dimporttsv.columns=HBASE_ROW_KEY,cf hbase-tbl-003 /user/biadmin/simple1.cvs

该命令会最终通过MapReduce job完成:

此时,可以在hdfs上面看到生成的HFile:

而且, 在hbase上也自动创建了表hbase-tbl-003,不过该表此时为空表:


b. 通过completebulkload 将数据导入表hbase-tbl-003

命令: hadoop jar lib/hbase-server-0.96.0.jar completebulkload hfile_tmp3 hbase-tbl-003

注意:执行该命令时,hadoop很可能会找不到相关的hbase依赖包,出现ClassNotFoundException的异常。一个简单的解决方法是将hbase相关的jar包都放到${HADOOP_HOME}/share/hadoop/common/lib下面,这样hadoop就能在运行前加载相关的hbase jar files。

运行该命令的本质是一个hdfs的mv操作,并不会启动MapReduce。

执行完后,表hbase-tbl-003里面就有了新导入的数据:



3、利用Import将数据导入到HBase

注:具体的一些实验在HBase导出CSV格式数据的方法 一文中有详细描述,这里说一下具体步骤。

a. HBase export工具导出的数据的格式是sequence file。比如,在执行完命令“bin/hbase org.apache.hadoop.hbase.mapreduce.Export test test-output-001”后,hbase会启动一个MapReduce作业,作业完成后会在hdfs上面会生成sequence file格式的数据文件

b. 对于这类Sequence file格式的数据文件,HBase是可以通过Import工具直接将它导入到HBase的表里面的。执行命令“bin/hbase org.apache.hadoop.hbase.mapreduce.Import test-01 test-output-001”,随后hbase会启动一个MapReduce 作业。然后 表test-01中会成功导入数据。

zhangjinlong87

bulk load关于分隔符的问题

在查看bulk load的源码了解到,其默认的分隔符为\t,也就是说如果数据是tab键分割的,就不需要指定分隔符了,如果需要换成其它分割符,在执行时加上-Dimporttsv.separator=",",则变成了以","分割。

前两天,无意间使用bulk load导入数据,导入的数据是以“\t”分割的,我在命令中指定了-Dimporttsv.separator="\t",怪事就出现了,报出异常:

java.lang.IllegalArgumentException: TsvParser only supports single-byte...

在查看bulk load的源码了解到,其默认的分隔符为\t,也就是说如果数据是tab键分割的,就不需要指定分隔符了,如果需要换成其它分割符,在执行时加上-Dimporttsv.separator=",",则变成了以","分割。

前两天,无意间使用bulk load导入数据,导入的数据是以“\t”分割的,我在命令中指定了-Dimporttsv.separator="\t",怪事就出现了,报出异常:

java.lang.IllegalArgumentException: TsvParser only supports single-byte separators
        at com.google.common.base.Preconditions.checkArgument(Preconditions.java:88)
        at org.apache.hadoop.hbase.mapreduce.ImportTsv$TsvParser.<init>(ImportTsv.java:88)
        at org.apache.hadoop.hbase.mapreduce.ImportTsv$TsvImporter.setup(ImportTsv.java:218)
        at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:142)
        at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:621)
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:305)
        at org.apache.hadoop.mapred.Child.main(Child.java:170)

跟踪了一下源码,发现是类TsvParser的构造函数中对分隔符的长度进行了验证。

[java] view plaincopy

  1. public TsvParser(String columnsSpecification, String separatorStr) {  
  2.       // Configure separator  
  3.       byte[] separator = Bytes.toBytes(separatorStr);  
  4.       Preconditions.checkArgument(separator.length == 1,//如果separator.length == 1为false的话,将会报出上面的异常  
  5.         "TsvParser only supports single-byte separators");  
  6.       separatorByte = separator[0];  
  7. ... ...  
  8. }  

这样看来是“\t”转化为byte数组后的长度不是1导致的,跟踪看到“\t”作为参数传进来后,java转义成“\\t”,这样造成了长度为2的情形,所以报出了以上异常信息。

所以在使用hbase的bulk load时,如果数据是"\t"分割的,建议不要加参数-Dimporttsv.separator,其一hbase默认就是制表符,其二会出现上面的异常。

现在比较理解为什么bulk load不用逗号、分号或者其他的作为默认的分隔符了,或许这就是其中的缘由吧!

zhangjinlong87

hive与hbase的区别与联系

问题导读:
hive与hbase的底层存储是什么?
hive是产生的原因是什么?
hbase是为了弥补hadoop的什么缺陷?


共同点:
1.hbase与hive都是架构在hadoop之上的。都是用hadoop作为底层存储

区别:
2.Hive是建立在Hadoop之上为了减少MapReduce jobs编写工作的批处理系统,HBase是为了支持弥补Hadoop对实时操作的缺陷的项目 。
3.想象你在操作RMDB数据库,如果是全表扫描,就用Hive+Hadoop,如果是索引访问,就用HBase+Hadoop 。
4.Hive query就是MapReduce jobs可以从5分钟到数小时不止,HBase是...

问题导读:
hive与hbase的底层存储是什么?
hive是产生的原因是什么?
hbase是为了弥补hadoop的什么缺陷?


共同点:
1.hbase与hive都是架构在hadoop之上的。都是用hadoop作为底层存储

区别:
2.Hive是建立在Hadoop之上为了减少MapReduce jobs编写工作的批处理系统,HBase是为了支持弥补Hadoop对实时操作的缺陷的项目 。
3.想象你在操作RMDB数据库,如果是全表扫描,就用Hive+Hadoop,如果是索引访问,就用HBase+Hadoop 。
4.Hive query就是MapReduce jobs可以从5分钟到数小时不止,HBase是非常高效的,肯定比Hive高效的多。
5.Hive本身不存储和计算数据,它完全依赖于HDFS和MapReduce,Hive中的表纯逻辑。
6.hive借用hadoop的MapReduce来完成一些hive中的命令的执行
7.hbase是物理表,不是逻辑表,提供一个超大的内存hash表,搜索引擎通过它来存储索引,方便查询操作。
8.hbase是列存储。
9.hdfs作为底层存储,hdfs是存放文件的系统,而Hbase负责组织文件。
10.hive需要用到hdfs存储文件,需要用到MapReduce计算框架。

我是个架构师

hbase : Error: JAVA_HOME is not set and Java could

今天在试验hbase的时候发现个问题。。在我linux上环境变量配置了java_home之后。。启动hdfs 为目录的hbase 报错。。报找不到java_home


解决办法:

几经周转配置了 conf/ hbase-env.sh 文件 中把java_home这一项配置好后。。再启动就没问题了。。。

在此记录下

今天在试验hbase的时候发现个问题。。在我linux上环境变量配置了java_home之后。。启动hdfs 为目录的hbase 报错。。报找不到java_home


解决办法:

几经周转配置了 conf/ hbase-env.sh 文件 中把java_home这一项配置好后。。再启动就没问题了。。。

在此记录下

未命名

hbase shell

1. 创建表

hbase表为free-schema,创建一个表,只需要指定列族即可

create 表名,列族名

create 'student', 'attr', 'score'


2. 

1. 创建表

hbase表为free-schema,创建一个表,只需要指定列族即可

create 表名,列族名

create 'student', 'attr', 'score'


2. 

keyknight

hbase入库速度和吞吐量的重要参数

吞吐量相关:

hbase.hregion.memstore.flush.size 

hbase.hstore.blockingStoreFiles      

hbase.hregion.memstore.block.multiplier 


内存分配相关:

hfile.block.cache.size

hbase.regionserver.global.memstore.upperLimit

hbase.regionserver.global.memstore.lowerLimit


HLOG相关:

hbase.regionserver...

吞吐量相关:

hbase.hregion.memstore.flush.size 

hbase.hstore.blockingStoreFiles      

hbase.hregion.memstore.block.multiplier 


内存分配相关:

hfile.block.cache.size

hbase.regionserver.global.memstore.upperLimit

hbase.regionserver.global.memstore.lowerLimit


HLOG相关:

hbase.regionserver.maxlogs

hbase.regionserver.hlog.lowreplication.rolllimit

keyknight

hadoop启动datanode失败的错误原因

日志:hadoop-cdhuser-datanode-zabhb000.log内容

2015-01-16 11:38:29,272 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: registered UNIX signal handlers for [TERM, HUP, INT]

2015-01-16 11:38:30,403 INFO org.apache.hadoop.metrics2.impl.MetricsConfig: loaded properties from hadoop-metrics2.properties...

日志:hadoop-cdhuser-datanode-zabhb000.log内容

2015-01-16 11:38:29,272 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: registered UNIX signal handlers for [TERM, HUP, INT]

2015-01-16 11:38:30,403 INFO org.apache.hadoop.metrics2.impl.MetricsConfig: loaded properties from hadoop-metrics2.properties

2015-01-16 11:38:30,468 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Scheduled snapshot period at 10 second(s).

2015-01-16 11:38:30,468 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: DataNode metrics system started

2015-01-16 11:38:30,471 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: File descriptor passing is enabled.

2015-01-16 11:38:30,473 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Configured hostname is zabhb000

2015-01-16 11:38:30,474 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Starting DataNode with maxLockedMemory = 0

2015-01-16 11:38:30,495 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Opened streaming server at /0.0.0.0:50010

2015-01-16 11:38:30,498 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Balancing bandwith is 41943040 bytes/s

2015-01-16 11:38:30,499 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Waiting for threadgroup to exit, active threads is 0

2015-01-16 11:38:30,499 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Shutdown complete.

2015-01-16 11:38:30,500 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Exception in secureMain

java.io.IOException: the path component: '/u06/cdhuser/data/hadoop_dfs' is group-writable, and the group is not root.  Its permissions are 0775, and it is owned by gid

501.  Please fix this or select a different socket path.

        at org.apache.hadoop.net.unix.DomainSocket.validateSocketPathSecurity0(Native Method)

        at org.apache.hadoop.net.unix.DomainSocket.bindAndListen(DomainSocket.java:189)

        at org.apache.hadoop.hdfs.net.DomainPeerServer.<init>(DomainPeerServer.java:42)

        at org.apache.hadoop.hdfs.server.datanode.DataNode.getDomainPeerServer(DataNode.java:611)

        at org.apache.hadoop.hdfs.server.datanode.DataNode.initDataXceiver(DataNode.java:577)

        at org.apache.hadoop.hdfs.server.datanode.DataNode.startDataNode(DataNode.java:773)

        at org.apache.hadoop.hdfs.server.datanode.DataNode.<init>(DataNode.java:292)

        at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:1893)

        at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:1780)

        at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:1827)

        at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:2003)

        at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:2027)

2015-01-16 11:38:30,504 INFO org.apache.hadoop.util.ExitUtil: Exiting with status 1

2015-01-16 11:38:30,505 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: SHUTDOWN_MSG:

/************************************************************

SHUTDOWN_MSG: Shutting down DataNode at zabhb000/10.10.1.127

错误原因:

我的hdfs-site.xml配置

<property>

<name>dfs.domain.socket.path</name>

<value>/u06/cdhuser/data/hadoop_dfs/dn_socket_handler</value>

</property>

而/u06/是/home/目录下的软连接目录,ln -sf 生成


解决方法:  安装hadoop在软连接生成的目录,或者 修改/u06/的权限。

LOFTER

让兴趣,更有趣

简单随性的记录
丰富多彩的内容
让生活更加充实

下载移动端
关注最新消息