當前位置:首頁 » 編程軟體 » thriftjava編譯

thriftjava編譯

發布時間: 2022-02-15 02:27:21

① Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/thrift/TException

uzòçmçjiem, visiem 1989tiem

② thrift和google protobuffer各有什麼優劣

Google放出來了Protocol buffers,一種用來部分替代xml的數據描述語言。Google就是Google,就算是推白菜出來,也一樣能讓人側目。其實protocol buffers也不是什麼新鮮的概念,且不說傳統的ASN.1, ICE這些有點類似的東西,facebook一年前就推出了thrift,應該說定位是非常的接近的。也有謠傳說是先有了protocol buffers在google內部流行,然後google的人跳槽到facebook,就出了thrift這個東西……呵呵,停止八卦,言歸正傳。 觀察法看到的優缺點 Thrift: 支持的語言更廣泛一些c++, java, python,ruby, csharp, haskell, ocmal, erlang, cocoa, php, squeak(真夠變態的) protobuf 目前還是只支持c++, java, python, 其他語言有待開發. Thrift提供的功能更豐富一些: Thrift提供了簡單的RPC構架(其實不簡單了, block, nonblock的都有了…..) protobuf好像一心一意做好自己的事情,只提供了序列化和反序列化的功能。 Thrift支持多種協議格式. Thrift的代碼實現,有專門的TProtocol和TTransport抽象,相互配合,可以實現多種協議,方便集成各種傳輸方式。至少目前Thrift就能使用json作為序列化協議。 protobuf好像只安心一種協議,並下決心把這個格式做好。輸入輸出也是標準的stream. 認真的說也不完全這樣,protobuf為了調試方便,也提供了Text_Fromat功能,這個也算一個nonbinary格式支持,這樣看來完全新協議還是有可能的。 Thrift還提供了不少語言的C mole(性能啊,都是性能啊) protobuf全部pure language實現, 反正現在已經都5到10倍速度了,不在乎了….. thrift目前不支持Windows平台,至少c++語言的runtime library和generated code是不不能在windows平台上使用的。(這真有點讓人難以接受啊,現代科技這么發達,還有怪獸boost,支持windows有這么難嗎?) protobuf沒有這個問題,提供了visual studio的項目文件,可以很順利的在windows平台下編譯。(題外話: 如果不知道googletest怎麼在windows平台上使用,可以參考protobuf的測試用例)。 The Thrift C++ runtime library does not currently work on Windows. This means that you』ll be able to compile ThriftIDL files to C++/Java/Python/etc., but you won』t be able to compile and run the generated C++ code under Windows. thrift wiki protobuf側重點是語言表達,同時在存儲效率上也下了不少功夫。用protobuf來直接讀寫數據結構相當的方便。 thrift側重點是構建誇語言的可伸縮的服務,特點就是支持的語言多,同時提供了完整的rpc service framework,可以很方便的直接構建服務,不需要做太多其他的工作。 數據類型相對固定的情況下,不論是thrift還是protobuf都會比直接處理xml要方便很多。不管是dom還是類sax,總沒有直接出數據結構訪問來的方便啊。

③ thrift c++ 服務端的非同步怎麼實現

仰望明天

thrift服務端的c++語言實現
1.thrift 概念1
thrift是一個軟體框架,用來進行可擴展且跨語言的服務的開發。它結合了功能強大的軟體堆棧和代碼生成引擎,以構建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 這些編程語言間無縫結合的、高效的服務。
thrift最初由facebook開發,07年四月開放源碼,08年5月進入apache孵化器。
thrift允許你定義一個簡單的定義文件中的數據類型和服務介面。以作為輸入文件,編譯器生成代碼用來方便地生成RPC客戶端和伺服器通信的無縫跨編程語言。
2.生成c++語言的thrift服務端
利用thrift軟體框架進行開發要首先進行環境的搭建,安裝thrift運行庫。
基本流程如下:
1)定義數據類型和服務介面文件:test.thrift;
2)利用代碼生成引擎生成服務端框架,thrift --gen cpp test.thrift;
3)在./gen-cpp/test_server.skeleton.cpp文件中添加定製的服務;
4)編寫客戶端程序向服務端請求服務。
詳細過程可以參加註釋2給出的鏈接地址。
thrift定義了自己的數據類型,從而實現了跨語言平台之間的數據交換,關於thrift數據類型的詳細說明可以參加註釋3給出的鏈接地址。
3.php客戶端
基於c++語言實現的thrift服務端程序經常被用在網站的後台提供實時且高效的服務,通常客戶端程序是php語言的實現版本。只要根據數據類型和服務介面文件test.thrift生成php語言的介面文件即可用來調用。方法是thrift --gen php test.thrift,調用該命令後會在工作目錄下生成./gen-php目錄,裡面有php語言的介面文件。
注釋:

④ thrift c++ list 怎麼用python客戶端實例化

thrift做為跨語言調用的方案有高效,支持語言較多,成熟等優點;代碼侵入較強是其弱點。
下面記錄以C++做伺服器,C++,java和python做客戶端的示例,這個和本人現在工作環境吻合,使用多線程長連接的socket來建立高效分布式系統的跨語言調用平台。遺憾的是目前版本(0.7.0)的C語言還不支持Compact協議,導致在現在的環境中nginx c mole調用thrift要使用binary協議。thrift開發團隊似乎對C語言不太感冒。
1.定義idl文件acsuser.thrift

1 struct User{
2 1: string uid,
3 2: string uname,
4 3: bool usex,
5 4: i16 uage,
6 }
7 service UserService{
8 void add(1: User u),
9 User get(1: string uid),
10 }

2.生成c++,java和python代碼框架
1 thrift -r --gen cpp acsuser.thrift
2 thrift -r --gen java acsuser.thrift
3 thrift -r --gen py acsuser.thrift

這時生成子目錄gen-cpp,gen-java,gen-py
3.生成C++服務端代碼
cp gen-cpp/UserService_server.skeleton.cpp UserServer.cpp
修改UserServer.cpp

1 #include "UserService.h"
2 #include <config.h>
3 //#include <protocol/TBinaryProtocol.h>
4 #include <protocol/TCompactProtocol.h>
5 #include <server/TSimpleServer.h>
6 #include <transport/TServerSocket.h>
7 #include <transport/TBufferTransports.h>
8 #include <concurrency/ThreadManager.h>
9 #include <concurrency/PosixThreadFactory.h>
10 #include <server/TThreadPoolServer.h>
11 #include <server/TThreadedServer.h>
12
13 using namespace ::apache::thrift;
14 using namespace ::apache::thrift::protocol;
15 using namespace ::apache::thrift::transport;
16 using namespace ::apache::thrift::server;
17 using namespace ::apache::thrift::concurrency;
18
19 using boost::shared_ptr;
20
21 class UserServiceHandler : virtual public UserServiceIf {
22 public:
23 UserServiceHandler() {
24 // Your initialization goes here
25 }
26
27 void add(const User& u) {
28 // Your implementation goes here
29 printf("uid=%s uname=%s usex=%d uage=%d\n", u.uid.c_str(), u.uname.c_str(), u.usex, u.uage);
30 }
31
32 void get(User& _return, const std::string& uid) {
33 // Your implementation goes here
34 _return.uid = "leo1";
35 _return.uname = "yueyue";
36 _return.usex = 1;
37 _return.uage = 3;
38 printf("uid=%s uname=%s usex=%d uage=%d\n", _return.uid.c_str(), _return.uname.c_str(), _return.usex, _return.uage);
39 }
40
41 };
42
43 int main(int argc, char **argv) {
44 shared_ptr<UserServiceHandler> handler(new UserServiceHandler());
45 shared_ptr<TProcessor> processor(new UserServiceProcessor(handler));
46 shared_ptr<TProtocolFactory> protocolFactory(new TCompactProtocolFactory());
47 shared_ptr<TTransportFactory> transportFactory(new TBufferedTransportFactory());
48 shared_ptr<TServerTransport> serverTransport(new TServerSocket(9090));
49
50 shared_ptr<ThreadManager> threadManager = ThreadManager::newSimpleThreadManager(10);
51 shared_ptr<PosixThreadFactory> threadFactory = shared_ptr<PosixThreadFactory>(new PosixThreadFactory());
52 threadManager->threadFactory(threadFactory);
53 threadManager->start();
54 printf("start user server...\n");
55
56 TThreadPoolServer server(processor, serverTransport, transportFactory, protocolFactory, threadManager);
57 server.serve();
58 return 0;
59 }

注意這段代碼使用TCompactProtocol,需要#include <config.h>
另外這個是Blocking的多線程伺服器
4.生成C++的client文件UserClient.cpp

1 #include "UserService.h"
2 #include <config.h>
3 #include <transport/TSocket.h>
4 #include <transport/TBufferTransports.h>
5 #include <protocol/TCompactProtocol.h>
6
7 using namespace apache::thrift;
8 using namespace apache::thrift::protocol;
9 using namespace apache::thrift::transport;
10
11 using boost::shared_ptr;
12
13 int main(int argc, char **argv) {
14 boost::shared_ptr<TSocket> socket(new TSocket("localhost", 9090));
15 boost::shared_ptr<TTransport> transport(new TBufferedTransport(socket));
16 boost::shared_ptr<TProtocol> protocol(new TCompactProtocol(transport));
17
18 transport->open();
19
20 User u;
21 u.uid = "leo";
22 u.uname = "yueyue";
23 u.usex = 1;
24 u.uage = 3;
25
26 UserServiceClient client(protocol);
27 client.add(u);
28
29 User u1;
30 client.get(u1,"lll");
31
32 transport->close();
33 printf("uid=%s uname=%s usex=%d uage=%d\n", u1.uid.c_str(), u1.uname.c_str(), u1.usex, u1.uage);
34 return 0;
35 }

5.生成Makefile

1 BOOST_DIR = /usr/local/include/boost/
2 THRIFT_DIR = /usr/local/include/thrift
3 LIB_DIR = /usr/local/lib
4 GEN_SRC = ./gen-cpp/acsuser_types.cpp ./gen-cpp/acsuser_constants.cpp ./gen-cpp/UserService.cpp
5 default: server client
6 server: UserServer.cpp
7 g++ -g -o UserServer -I${THRIFT_DIR} -I${BOOST_DIR} -I./gen-cpp -L${LIB_DIR} -lthrift UserServer.cpp ${GEN_SRC}
8 client: UserClient.cpp
9 g++ -g -o UserClient -lm -pthread -lz -lrt -lssl -I${THRIFT_DIR} -I${BOOST_DIR} -I./gen-cpp -L${LIB_DIR} -lthrift UserClient.cpp ${GEN_SRC}
10 clean:
11 $(RM) -r UserServer UserClient

6.啟動c++ server

1 ./UserServer

7.測試c++ client

1 ./UserClient

8.寫java client文件UserClient.java

1 import org.apache.thrift.TException;
2 import org.apache.thrift.protocol.TCompactProtocol;
3 import org.apache.thrift.protocol.TProtocol;
4 import org.apache.thrift.transport.TFramedTransport;
5 import org.apache.thrift.transport.TNonblockingSocket;
6 import org.apache.thrift.transport.TSocket;
7 import org.apache.thrift.transport.TTransport;
8 import org.apache.thrift.transport.TTransportException;
9
10 //import UserService.Client;
11
12 public class UserClient {
13 private void start() {
14 try {
15 TTransport socket = new TSocket("localhost", 9090);
16 //TTransport transport = new TFramedTransport(socket);
17 TProtocol protocol = new TCompactProtocol(socket);
18
19 UserService.Client client = new UserService.Client(protocol);
20 socket.open();
21 System.out.println(client.get("lll"));
22
23 User u = new User();
24 u.uid="leojava";
25 u.uname="yueyue";
26 u.usex=true;
27 u.uage=3;
28 client.add(u);
29 socket.close();
30
31 } catch (TTransportException e) {
32 e.printStackTrace();
33 } catch (TException e) {
34 e.printStackTrace();
35 }
36 }
37
38 public static void main(String[] args) {
39 UserClient c = new UserClient();
40 c.start();
41
42 }
43 }

編譯和運行java client
1 javac -classpath /usr/local/lib/libthrift-0.7.0.jar:/usr/local/lib/log4j-1.2.14.jar:/usr/local/lib/commons-logging-1.1.1.jar:/usr/local/lib/slf4j-api-1.5.8.jar UserClient.java ./gen-java/*.java
2 java -classpath .:./gen-java:/usr/local/lib/libthrift-0.7.0.jar:/usr/local/lib/log4j-1.2.14.jar:/usr/local/lib/commons-logging-1.1.1.jar:/usr/local/lib/slf4j-api-1.5.8.jar:/usr/local/lib/slf4j-log4j12-1.5.8.jar UserClient

9.寫Python client文件PythonClient.py

1 #!/usr/bin/env python
2 import sys
3 sys.path.append('./gen-py')
4 from acsuser import UserService
5 from acsuser.ttypes import *
6 from thrift import Thrift
7 from thrift.transport import TSocket
8 from thrift.transport import TTransport
9 from thrift.protocol import TCompactProtocol
10
11 # Make socket
12 transport = TSocket.TSocket('localhost', 9090)
13 # Buffering is critical. Raw sockets are very slow
14 transport = TTransport.TBufferedTransport(transport)
15 # Wrap in a protocol
16 protocol = TCompactProtocol.TCompactProtocol(transport)
17 # Create a client to use the protocol encoder
18 client = UserService.Client(protocol)
19 # Connect!
20 transport.open()
21 # Call Server services
22 u = client.get('lll')
23 print 'uid=%s uname=%s usex=%d u.uage=%d' %(u.uid,u.uname,u.usex,u.uage)
24
25 u1 = User()
26 u1.uid='leo'
27 u1.uname='yueyue'
28 u1.usex=1
29 u1.uage=3
30 client.add(u1)

執行python client代碼
1 chmod 777 PythonClient.py
2 ./PythonClient.py

⑤ 學習Hadoop必須要懂linux和Java嗎Hadoop的學習路徑是怎樣的

hadoop相關有很多學習的方向,內容不同,運維的話熟練掌握Linux, java, python以及hadoop周邊生態軟體的所有原理和配置部署,打patch重新編譯是最低的要求。開發的話java和演算法,SQL熟練是最低要求,python 和C是次要要求。Hbase起碼熟練掌握java,thrift, rest等相關知識。兄弟 連Java 戰狼 班

⑥ 請教一下java和php協同開發的方法

引用
因為在做垂直搜索工作中,使用的是java編寫的一個搜索類庫。做垂直搜索,很多實用要使用到配置。當搜索的信息量大時,網站的更新。搜索程序的配置維護是一個不可忽視的問題。所以用了php做網頁,提供配置界面,這樣就可以不用直接修改配置文件或是配置資料庫表。當把配置信息配置好了,我們需要檢測配置是否正確,因為使用的是java程序,所以檢測配置的正確與否使用的也是java程序來檢測。這里就存在一個問題,就是需要把php頁面上的信息傳入到java程序中去檢測。這個時候就需要php和java通信了。下面我就來介紹下怎麼使php跟java通信(當然,你也可以使用類似webservice等技術)也就是php中調用java程序。 php要調用java程序:需要以下准備,php程序,java程序,還有就是shell程序或是bat程序。下面分別介紹下在linux伺服器下php調用java程序和在windows伺服器下調用java程序。前提是php,apache,jdk的環境都已經配置好。
一 在linux下php調用java程序是通過shell文件。分別是以下三個文件: test_shell.php test_shell.java test_shell.sh 他們的源代碼如下:

1.test_shell.java程序代碼

public class test_shell {

public static void main(String[] args) {

System.out.println("你輸入的參數是:"+args[0]+"t"+args[1]);

}

}

2.test_shell.php程序代碼

<?php

/*

* 該函數是用來執行shell命令的,其實還可以使用:exec(),system(),
* popen()和pclose(),passthru() 函數。最長用的是前面兩個和例中使
* 用的shell_exec()。

*/

$args1="我喜歡你";

$args2="我很愛你";

// 注意空格

$r=shell_exec("./test_shell.sh $args1 $args2");

echo $r;

?>

3.test_shell.sh程序代碼是

#!/bin/sh

JAVA_HOME=/usr/local/jdk

CLASSPATH=.:/usr/local/jdk/jre/lib/rt.jar:/usr/local/apache/htdocs/test_shell/test_shell.class

PATH=$PATH:$JAVA_HOME/bin

export JAVA_HOME CLASSPATH PATH

cd /usr/local/apache/htdocs/test_shell

java test_shell

#shell代碼結束

以下是三個程序的存放路徑和運行次序。
1.三個文件都必須在同一目錄下,比如在/usr/local/apache/htdocs/test_shell/下,不然php很難調到java程序。

2.把test_shell.java程序編譯成test_shell.class,然後把test_shell.class文件存放到CLASSPATH中。如果系統配置了那些環境變數,這里在配置一次是沒有壞處的,也不會影響配置好的系統環境變數。這里設置的好處是當沒有配置jdk環境配置,只有jre時,則需把jre放到/usr/local/jdk下就以。

二、下面先介紹在windows伺服器下,php調用java程序是通過bat文件來的。分別是以下三個文件: test_bat.php test_bat.java test_bat.sh 他們的源代碼如下:

1.java程序

public class test_bat {

public static void main(String[] args) {

System.out.println("你輸入的參數是:"+args[0]+"t"+args[1]);

}

}

2.test_bat.php程序代碼

<?php

/*

* 該函數是用來執行shell命令的,其實還可以使用:exec(),system(),
* popen()和pclose(),passthru() 函數。最長用的是前面兩個和例中使
* 用的shell_exec()。

*/

$args1="我喜歡你";

$args2="我很愛你";

// 注意空格

$r=shell_exec("./test_shell.sh $args1 $args2");

echo $r;

?>

3.test_bat.sh程序代碼是

@echo off
set path=%path%;%cd%jrebin
set CLASSPATH=.;%cd%jrelibrt.jar;%cd%test_bat.class
java test_bat %1 %2

#bat代碼結束

1.三個文件都必須放在同一目錄下,比如在/usr/local/apache/htdocs/test_bat/下,不然php很難調到java程序。

2.把test_bat.java程序編譯成test_bat.class,然後把test_bat.class文件存放到CLASSPATH中。如果系統配置了那些環境變數,這里在配置是沒有壞處的,也不會影響配置好的系統環境變數。這里設置的好處是當沒有配置jdk環境配置,只有jre時,則需把jre放到跟跟test_bat.java同一目錄下就行了。

三、上面兩個例子中,test_shell.sh用的絕對路徑,test_bat.bat是用的相對路徑。不管是絕對還是相對,只要路徑對了就行了。

⑦ thrift可以脫離boost庫嗎

1. 必須安裝boost。最新的穩定版是1.48.0。

1.1.先下載:sourceforge.net/projects/boost/files/boost/1.48.0/
選擇tar.gz包,
下載後我解壓到了/usr/local/boost_1_48下:tar zxvf boost1.48.0 -C /usr/local/boost_1_48

1.2.安裝過程和以前的老版本有些不同,看自帶軟體包里的index.html就可以了:

主要內容涉及到安裝的就2步,很簡單,進入一級目錄:

$ ./bootstrap.sh //默認安裝到/usr/local/include/boost 和/usr/local/lib下
$ ./b2 install

1.3接下來設置環境變數自動導入:
先用vim創建文件:/etc/profile.d/boost.sh,(若不能執行的話使用chmod a+x boost.sh設置執行許可權),
內容為:

#!/bin/sh
#boost settings
BOOST_ROOT=/opt/boost_1_48
BOOST_INCLUDE=/usr/local/include/boost
BOOST_LIB=/usr/local/lib
export BOOST_ROOT BOOST_INCLUDE BOOST_LIB

注意:
linux程序運行時載入共享庫出現的錯誤:
"error while loading shared libraries: xxxx: cannot open shared object file: No such file or directory"
解決步驟:
1、使用find命令查找缺失的xxxx共享庫文件所在位置。參考:#find 目錄 -name "xxxx*"
2、將找到的目錄位置寫入 /etc/ld.so.conf 配置文件,這個文件記錄了編譯時使用的動態鏈接庫的路徑。
3、然後使用ldconfig命令,使配置生效。

2. 安裝libevent(選擇noblokingserver必須安裝libevent,如果出現noblokingserver相關的錯誤就是沒有安裝libevent)。
我安裝的版本是最新的libevent1.4.13:
wget http://monkey.org/~provos/libevent-1.4.13-stable.tar.gz
tar xvzf libevent-1.4.13-stable.tar.gz
cd libevent-1.4.13-stable
./configure && make
make install
3. 接下來就是安裝thrift,我下載的是最新的thrift0.8.0版本,進入thrift0.8.0目錄:
因為我只需要編譯cpp,用以下命令:(編譯選項可以參考http://www.coder4.com/archives/2110):
./configure --with-cpp --with-boost --without-python --without-csharp --without-java --without-erlang --without-perl --without-php --without-php_extension --without-ruby --without-haskell --without-go

#make
make

#install
make install
如果還需要編譯java或者別的語言,還需要提前安裝別的包,具體參考http://wiki.apache.org/thrift/ThriftRequirements:
C++
Boost 1.33.1+
libevent (optional, to build the nonblocking server)
zlib (optional)
Java
Java 1.5+
Apache Ant
Apache Ivy (recommended)
Apache Commons Lang (recommended)
SLF4J
C#: Mono 1.2.4+ (and pkg-config to detect it) or Visual Studio 2005+
Python 2.4+ (including header files for extension moles)
PHP 5.0+ (optionally including header files for extension moles)
Ruby 1.8+ (including header files for extension moles)
Erlang R12 (R11 works but not recommended)
Perl 5
Bit::Vector
Class::Accessor
安裝完thrift先試驗一下。進入thrift下的tutorial,編譯給出的例子:
thrift -r --gen cpp tutorial.thrift,

會在gen-cpp目錄下生成一些文件。然後進入CPP目錄,進行編譯:
make
有可能遇到錯誤,提示: hton* declarations will not be visible to the compiler。這是thrift的一個bug,可能有的版本沒有該錯誤,但是我安裝的這個版本有。解決的辦法是:
使用g++編譯時加入 -DHAVE_NETINET_IN_H
這樣可以使預處理器include進 netinet/in.h in thrift/protocol/TPrototol.h, 這樣 hton* declarations will be visible to the compiler.
下面是一個老外對這個bug的說明:

TProtocol.h has the following lines which cause the compiler error when HAVE_NETINET_IN_H is not defined.
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif

This might be a bug in the Thrift configure script which somehow skips the define.
針對上面的那個例子,修改CPP文件夾里的Makefile,在編譯行加入相應的參數:
g++ -DHAVE_NETINET_IN_H -o CppServer -I${THRIFT_DIR} -I${BOOST_DIR} -I../gen-cpp -L${LIB_DIR} -lthrift CppServer.cpp ${GEN_SRC}

再進行make,得到兩個可執行文件,先執行CppServer,再啟動CppClient。
到此,thrift安裝完畢。

⑧ grpc proto 文件 c++ java 可以共用嗎

ProtoBuf 是一套介面描述語言(IDL)和相關工具集(主要是 protoc,基於 C++ 實現),類似 Apache 的 Thrift)。
用戶寫好 .proto 描述文件,之後使用 protoc 可以很容易編譯成眾多計算機語言(C++、Java、Python、C#、Golang 等)的介面代碼。這些代碼可以支持 gRPC,也可以不支持。

⑨ 什麼是Thrift

  • thrift是一個軟體框架,用來進行可擴展且跨語言的服務的開發。它結合了功能強大的軟體堆棧和代碼生成引擎,以構建在 C++, Java, Go,Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 這些編程語言間無縫結合的、高效的服務。


  • thrift最初由facebook開發用做系統內各語言之間的RPC通信 。
    2007年由facebook貢獻到apache基金 ,08年5月進入apache孵化器 。
    支持多種語言之間的RPC方式的通信:php語言client可以構造一個對象,調用相應的服務方法來調用java語言的服務 ,跨越語言的C/S RPC調用 。


  • thrift允許定義一個簡單的定義文件中的數據類型和服務介面,以作為輸入文件,編譯器生成代碼用來方便地生成RPC客戶端和伺服器通信的無縫跨編程語言。

⑩ 學習hadoop需要掌握java么

hadoop相關有很多學習的方向,內容不同,運維的話熟練掌握Linux, java, python以及hadoop周邊生態軟體的所有原理和配置部署,打patch重新編譯是最低的要求。開發的話java和演算法,SQL熟練是最低要求,python 和C是次要要求。Hbase起碼熟練掌握java,thrift, rest等相關知識。兄弟 連Java戰 狼班

熱點內容
谷能壓縮機 發布:2025-01-13 15:44:30 瀏覽:412
電腦電腦直連通訊ftp 發布:2025-01-13 15:38:03 瀏覽:717
nvm存儲 發布:2025-01-13 15:36:19 瀏覽:552
京東架構師緩存經驗 發布:2025-01-13 15:33:00 瀏覽:726
android圖片顏色 發布:2025-01-13 15:26:09 瀏覽:268
國家稅務總局電腦伺服器 發布:2025-01-13 15:10:24 瀏覽:596
金立老款機的開機密碼是多少 發布:2025-01-13 15:04:45 瀏覽:456
湖南網上辦稅初始密碼多少 發布:2025-01-13 15:02:49 瀏覽:417
怎麼使用筆記本連接伺服器 發布:2025-01-13 15:02:48 瀏覽:705
長城cs75plus選哪個配置 發布:2025-01-13 14:54:05 瀏覽:22