打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Impala源码分析---1
//image109.360doc.com/DownloadImg/2018/03/1914/127659840_1_20180319024143113
2、Impala源码分析
参考链接:http://www.sizeofvoid.net/wp-content/uploads/ImpalaIntroduction2.pdf
本章开始进入源码分析阶段,参考链接是一篇非常好的impala实现、运行流程介绍的文档,感谢作者。
2.1 Impala内部架构
Impala内部架构图如下:
图2-1 Impala内部架构
从图中可以看出,Impala三个部分:client、Impalad、StateStore的关系。
组件
说明
Client
图中可以看到有三种,是Thrift客户端,用来提交查询,连接到Impalad的21000端口
Impalad
有frontEnd和backEnd两部分,包括三个Thrift Server(beeswax-server、hs2-server、be-server)
StateStore
各个impalad向其注册,然后它向各个impalad更新集群中其他节点的状态
下面介绍一下Impalad组件的各个端口,如下表:
属性
说明
Impalad组件端口
Impala 后台程序后端端口
be_port
22000
默认值
ImpalaBackendService 导出的端口。
Impala Daemon Beeswax 端口
beeswax_port
21000
默认值
Impala Daemon 向 Beeswax客户端请求提供服务所使用的端口。
Impala Daemon HiveServer2 端口
hs2_port
21050
默认值
Impala Daemon 向 HiveServer2客户端请求提供服务所使用的端口。
StateStoreSubscriber 服务端口
state_store_subscriber_port
23000
默认值
StateStoreSubscriberService 运行的端口。
StateStore组件端口
StateStore 服务端口
state_store_port
24000
默认值
StateStoreService 导出的端口。
StateStore HTTP 服务器端口
webserver_port
25010
默认值
StateStore 调试网站服务器运行的端口。
其中beeswax_port=21000是用来给Beeswax客户端提供服务的端口,比如图中的Hue客户端、JDBC、Impala-shell三种client都会使用这个端口;hs2_port=21050是用来给HiveServer2客户端提供服务的;be_port=22000是用来与内部的其他Impalad进程交互的端口;state_store_subscriber_port=23000是用来向StateStated进程注册自己和更新状态用的端口;而StateStore组件里的24000端口正是用来与Impalad的23000端口进行交互的,其他端口不太重要,不做介绍。
整体的代码文件结构如下:
2.2 Impalad代码分析
2.2.1 Impalad-main.cc
[cpp] view plain copy
16 // This file contains the main() function for the impala daemon process,
17 // which exports the Thrift services ImpalaService and ImpalaInternalService.
18
19 #include <unistd.h>
20 #include <jni.h>
21
22 #include "common/logging.h"
23 #include "common/init.h"
24 #include "exec/hbase-table-scanner.h"
25 #include "exec/hbase-table-writer.h"
26 #include "runtime/hbase-table-factory.h"
27 #include "codegen/llvm-codegen.h"
28 #include "common/status.h"
29 #include "runtime/coordinator.h"
30 #include "runtime/exec-env.h"
31 #include "util/jni-util.h"
32 #include "util/network-util.h"
33 #include "rpc/thrift-util.h"
34 #include "rpc/thrift-server.h"
35 #include "rpc/rpc-trace.h"
36 #include "service/impala-server.h"
37 #include "service/fe-support.h"
38 #include "gen-cpp/ImpalaService.h"
39 #include "gen-cpp/ImpalaInternalService.h"
40 #include "util/impalad-metrics.h"
41 #include "util/thread.h"
42
43 using namespace impala;
44 using namespace std;
45
46 DECLARE_string(classpath);
47 DECLARE_bool(use_statestore);
48 DECLARE_int32(beeswax_port);
49 DECLARE_int32(hs2_port);
50 DECLARE_int32(be_port);
51 DECLARE_string(principal);
52
53 int main(int argc, char** argv) {
54   InitCommonRuntime(argc, argv, true);    //参数解析,开启日志,基于Google gflags和glog
55
56   LlvmCodeGen::InitializeLlvm();
57   JniUtil::InitLibhdfs();      //初始化JNI,因为Fe部分是java开发的
58   EXIT_IF_ERROR(HBaseTableScanner::Init());
59   EXIT_IF_ERROR(HBaseTableFactory::Init());
60   EXIT_IF_ERROR(HBaseTableWriter::InitJNI());
61   InitFeSupport();
62
63   // start backend service for the coordinator on be_port
64   ExecEnv exec_env;  //ExecEnv是query/paln-fragment的执行环境
65   StartThreadInstrumentation(exec_env.metrics(), exec_env.webserver());
66   InitRpcEventTracing(exec_env.webserver());
67
68   ThriftServer* beeswax_server = NULL;
69   ThriftServer* hs2_server = NULL;
70   ThriftServer* be_server = NULL;     //这是三个ThriftServer,原来服务client和其他impalad backend
71   ImpalaServer* server = NULL;     //此server将上面三个ThriftServer包装起来对外提供服务
72  EXIT_IF_ERROR(CreateImpalaServer(&exec_env, FLAGS_beeswax_port, FLAGS_hs2_port,
73       FLAGS_be_port, &beeswax_server, &hs2_server, &be_server, &server));    //创建ImpalaServer
74
75   EXIT_IF_ERROR(be_server->Start());      //启动be_server
76
77   Status status = exec_env.StartServices();   //启动service,包括statestore_subscriber (用来向statestod进程注册)
78   if (!status.ok()) {
79     LOG(ERROR) << "Impalad services did not start correctly, exiting.  Error: "
80                << status.GetErrorMsg();
81     ShutdownLogging();
82     exit(1);
83   }
84
85   // this blocks until the beeswax and hs2 servers terminate
86   EXIT_IF_ERROR(beeswax_server->Start());
87   EXIT_IF_ERROR(hs2_server->Start());
88   ImpaladMetrics::IMPALA_SERVER_READY->Update(true);
89   LOG(INFO) << "Impala has started.";
90   beeswax_server->Join();       //阻塞等待beeswax-server退出才执行后面的语句
91   hs2_server->Join();         //阻塞等待hs2-server退出才继续执行后面语句
92
93   delete be_server;
94   delete beeswax_server;
95   delete hs2_server;
96 }
待续。。。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
有关于*daemonnotrunning.startingitnowonport5037*A
如何同时启动多个Tomcat服务器
tomcat的4个端口配置
weblogic 9.x 修改端口号
Windows 下安装多个Redis 实例
FTP的两种建立连接的方式
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服