m/r读取 hbase如何做到分布到各个datanode上面执行

herofour444 2014-08-25 09:40:52
hadoop2,hbase0.96
1个namenode,2个datanode
在namenode上用ecipse写了个m/r程序,目的是从2个datanode中读取hbase信息,
可是运行后发现这个程序貌似只在namenode上面跑,没有在两个datanode上面跑啊,并且速度很慢。
这样读取hbase的数据还是远程读取,请问还需要将程序打包,发送到两个datanode上面吗?

map中,将像solr中写入的注释掉了,目前1分钟能读取6000条记录。
我理解的 分布式 运行,应该 是程序在两个datanode上面执行,并且访问的是本地的hbase数据。
是否需要将程序打包,然后考到datanode上面执行。

主程序:
public static void main(String[] args) throws IOException,
InterruptedException, ClassNotFoundException, URISyntaxException {
args = new String[3];
args[0] = "/root/workspace/createIndex/config.properties";

if (args.length == 0 || args.length > 3) {
usage();
}

createHBaseConfiguration(args[0]);
ConfigProperties tutorialProperties = new ConfigProperties(args[0]);
String tbName = tutorialProperties.getHBTbName();
String tbFamily = tutorialProperties.getHBFamily();

Job job = new Job(conf, "SolrHBaseIndexer");
job.setJarByClass(SolrHBaseIndexer.class);

Scan scan = new Scan();


scan.addFamily(Bytes.toBytes(tbFamily));
scan.setCaching(10000); // 设置缓存数据量来提高效率
scan.setCacheBlocks(false);

// 创建Map任务
System.out.println("jianli yige mr chengxu ...........................");
TableMapReduceUtil.initTableMapperJob(tbName, scan,
SolrHBaseIndexerMapper.class, null, null, job);

// 不需要输出
job.setOutputFormatClass(NullOutputFormat.class);
// job.setNumReduceTasks(0);
boolean b = job.waitForCompletion(true);
if (!b) {
throw new IOException("error with job!");
}
System.exit(b ? 0 : 1);
}


map程序:
private int i = 0;
// MAPPER任务

public void map(ImmutableBytesWritable key, Result hbaseResult,
Context context) throws InterruptedException, IOException {


Configuration conf = context.getConfiguration();
//solr服务连接配置
// HttpSolrServer solrServer = new HttpSolrServer(conf.get("solr.server"));
// solrServer.setDefaultMaxConnectionsPerHost(50);
//solrServer.setMaxTotalConnections(100);
// solrServer.setSoTimeout(200);
// solrServer.setConnectionTimeout(20000);
// SolrInputDocument solrDoc = new SolrInputDocument();
// System.out.println("2222222222222222222222222222222222222222222222----"+hbaseResult.size());
// try {
// solrDoc.addField("ID", new String(hbaseResult.getRow()));
for (KeyValue rowQualifierAndValue : hbaseResult.list()) {
String fieldName = new String(
rowQualifierAndValue.getQualifier());
String fieldValue = new String(rowQualifierAndValue.getValue());
if (
// fieldName.equalsIgnoreCase("DZBM")
// || fieldName.equalsIgnoreCase("GMSFHM")
// || fieldName.equalsIgnoreCase("FJMC")
// || fieldName.equalsIgnoreCase("XM")
fieldName.equalsIgnoreCase("FDDWZGYXM")
|| fieldName.equalsIgnoreCase("DWMC")
|| fieldName.equalsIgnoreCase("SFZHM")
|| fieldName.equalsIgnoreCase("TXSJ")
) {
// solrDoc.addField(fieldName, fieldValue);
}
}
// solrServer.add(solrDoc);
// 提交
// solrServer.commit(true, true, true);
i = i + 1;
System.out.println("已成功-- " + i);
// } catch (SolrServerException e) {
// System.err.println("更新Solr索引异常:" + new String(hbaseResult.getRow()));
// }
}
...全文
183 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
SG90 2014-08-26
  • 打赏
  • 举报
回复
看看这个:http://zy19982004.iteye.com/blog/2031172 是不是有帮助
SG90 2014-08-26
  • 打赏
  • 举报
回复
引用 7 楼 Imbyr 的回复:
看看这个:http://stackoverflow.com/questions/19943766/hadoop-unable-to-load-native-hadoop-library-for-your-platform-error-on-centos
是32位和64位机器不同的警告
SG90 2014-08-26
  • 打赏
  • 举报
回复
看看这个:http://stackoverflow.com/questions/19943766/hadoop-unable-to-load-native-hadoop-library-for-your-platform-error-on-centos
SG90 2014-08-26
  • 打赏
  • 举报
回复
引用 5 楼 herofour444 的回复:
每次运行run on hadoop 都有一个警告错误
从以下位置加载配置文件: /root/workspace/createIndex/config.properties
从以下位置加载配置文件: /root/workspace/createIndex/config.properties
2014-08-26 08:42:35,356 WARN  [main] util.NativeCodeLoader (NativeCodeLoader.java:<clinit>(62)) - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
jianli yige  mr chengxu ...........................
2014-08-26 08:42:35,802 INFO  [main] Configuration.deprecation (Configuration.java:warnOnceIfDeprecated(840)) - mapreduce.map.class is deprecated. Instead, use mapreduce.job.map.class
2014-08-26 08:42:35,802 INFO  [main] Configuration.deprecation (Configuration.java:warnOnceIfDeprecated(840)) - mapred.job.name is deprecated. Instead, use mapreduce.job.name
感觉是Java版本不对啊
herofour444 2014-08-26
  • 打赏
  • 举报
回复
每次运行run on hadoop 都有一个警告错误
从以下位置加载配置文件: /root/workspace/createIndex/config.properties
从以下位置加载配置文件: /root/workspace/createIndex/config.properties
2014-08-26 08:42:35,356 WARN  [main] util.NativeCodeLoader (NativeCodeLoader.java:<clinit>(62)) - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
jianli yige  mr chengxu ...........................
2014-08-26 08:42:35,802 INFO  [main] Configuration.deprecation (Configuration.java:warnOnceIfDeprecated(840)) - mapreduce.map.class is deprecated. Instead, use mapreduce.job.map.class
2014-08-26 08:42:35,802 INFO  [main] Configuration.deprecation (Configuration.java:warnOnceIfDeprecated(840)) - mapred.job.name is deprecated. Instead, use mapreduce.job.name
herofour444 2014-08-26
  • 打赏
  • 举报
回复
用的是eclipse的 run on hadoop,正在看您的文章
SG90 2014-08-25
  • 打赏
  • 举报
回复
可以考虑使用Eclipse远程调试,Run on Hadoop
herofour444 2014-08-25
  • 打赏
  • 举报
回复
hbase的配置文件
# sql connect
HBASE_ZOOKEEPER_QUORUM=Master.Hadoop,
HBASE_ZOOKEEPER_PROPERTY_CLIENT_PORT=2181
HBASE_MASTER=Master.Hadoop:60000
HBASE_ROOTDIR=hdfs://Master.Hadoop:9000/hbase
DFS_NAME_DIR=/usr/local/hadoop/dfs/name
DFS_DATA_DIR=/usr/local/hadoop/dfs/data
FS_DEFAULT_NAME=hdfs://Master.Hadoop:9000
SOLR_SERVER=http://192.168.32.71:8080/solr/collection2
HBASE_TABLE_NAME=emp_natl_temp
HBASE_TABLE_FAMILY=emp_natl_temp
# sde connect

20,809

社区成员

发帖
与我相关
我的任务
社区描述
Hadoop生态大数据交流社区,致力于有Hadoop,hive,Spark,Hbase,Flink,ClickHouse,Kafka,数据仓库,大数据集群运维技术分享和交流等。致力于收集优质的博客
社区管理员
  • 分布式计算/Hadoop社区
  • 涤生大数据
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧