日志

Spark集群资源动态分配

Spark默认采取预分配方式给各个application分配资源,每个application会独占所有分配到的资源直到整个生命周期的结束.对于长周期任务,在workload低峰阶段空闲的资源将一直被抢占而得不到有效利用,无疑是相当浪费.Spark1.2开始引入动态资源分配(Dynamic Resource Allocation)机制,支持资源弹性分配.

动态资源分配

Spark的资源动态分配机制主要基于application的当前任务(task)负载,以executor为粒度(以Spark1.2为例)动态向集群申请或释放资源,这意味着空闲的资源将得到有效的回收,供其他application利用.

Spark1.2仅支持Yarn模式,从Spark1.6开始,支持standalone、Yarn、Mesos.

安装与配置

1. Spark配置

阅读全文

日志

通过Sqoop向Hive导入ORC表

Sqoop在很长一段时间都只支持导入为textfile、avrofile、sequencefile等格式,如果需要将数据导入为ORC、parquet等格式的Hive Table往往需要分两个步骤完成(先导出临时表,再通过Hive转换)。而从Sqoop 1.4.4开始,Sqoop集成了HCatalog,我们可以轻易地实现多格式支持。

HCatalog配置

Sqoop需要依赖HCatalog的lib,所以需要配置环境变量$HCAT_HOME,一般从hive目录下即可找到hcatalog的相关路径


导入命令

sqoop import 
--connect jdbc:mysql://127.0.0.1:3306/test 
--username your_user_name --password your_passwd 
--table table_name --driver com.mysql.jdbc.Driver 
--create-hcatalog-table 
--hcatalog-table table_name 
--hcatalog-partition-keys month,day 
--hcatalog-partition-values 12,09 
--hcatalog-storage-stanza 'stored as orc tblproperties ("orc.compress"="SNAPPY")'

参数说明

阅读全文

日志

E.L.K搭建实时日志分析平台

环境

Linux:Ubuntu 14.04.2 LTS

Java:1.8.0

Elasticsearch安装

Elasticsearch(以下简称ES)是一个基于Lucence的搜索服务器,具有高效的实时分析能力,搭建ES需要安装Java环境,设置好JAVA_HOME参数即可.

1)下载ES(本例为2.2.0)

点击下载ES

2)解压后在根目录执行以下命令启动ES

bin/elasticsearch

3)检查是否安装成功

curl -X GET http://localhost:9200

 返回以下信息则搭建成功

{
  "name" : "Prodigy",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "2.2.0",
    "build_hash" : "8ff36d139e16f8720f2947ef62c8167a888992fe",
    "build_timestamp" : "2016-01-27T13:32:39Z",
    "build_snapshot" : false,
    "lucene_version" : "5.4.1"
  },
  "tagline" : "You Know, for Search"
}

Kibana安装

Kibana是一个数据可视化平台,它可以让你通过惊艳、强大的制图进行数据交互.

1)下载Kibana(本例为4.4.0)

点击下载(Kibana4.4.0-Linux-64Bit)

其他版本下载(注意Kibana版本是否兼容你所安装的ES版本)

https://www.elastic.co/downloads/kibana

2)配置Kibana

阅读全文

日志

Thrift操作HBase一段时间后服务挂掉的问题

最近在python项目中通过thrift API操作HBase,发现thrift server在执行操作后运行一段时间就会crash,一番折腾发现这是HBase-thrift的天炸BUG

抛出异常

[thrift-worker-11] thrift.ThriftServerRunner$HBaseHandler: Can't get the location
at org.apache.hadoop.hbase.client.RpcRetryingCallerWithReadReplicas.getRegionLocations(RpcRetryingCallerWithReadReplicas.java:309)  at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:153)
at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:61)
at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries(RpcRetryingCaller.java:200)
    ...

异常原因描述

当空闲的连接从thrift server被清除的时候,该连接之下的table实例依然缓存在线程的local cache中,当再次操作table的时候自然会出现 Can’t get the location 的异常,因为连接早已关闭.


异常影响

受影响版本:

0.98.13, 1.1.1, 1.0.1.1, 1.1.0.1

已修复版本:

2.0.0, 0.98.14, 1.0.2, 1.2.0, 1.1.2, 1.3.0

Thrift影响:

该Bug出现在Thrift1中,Thrift2没有这个问题


解决方法

替换已修复版本的jar依赖,注意版本兼容问题(例如:v1.1.1的修复参考请替换为v1.1.2

转载请注明出处:

© http://hejunhao.me