Hướng dẫn Apache Sqoop - Nhập / Xuất dữ liệu giữa HDFS và RDBMS



Hướng dẫn sử dụng Apache Sqoop: Sqoop là một công cụ để truyền dữ liệu giữa Hadoop và cơ sở dữ liệu quan hệ. Blog này bao gồm nhập và xuất Sooop từ MySQL.

Trước khi bắt đầu với hướng dẫn Apache Sqoop này, chúng ta hãy lùi lại một bước. Bạn có thể nhớ lại tầm quan trọng của việc nhập dữ liệu, như chúng ta đã thảo luận trong blog trước đó của chúng ta về Apache Flume . Bây giờ, như chúng ta biết rằng Apache Flume là một công cụ nhập dữ liệu cho các nguồn không có cấu trúc, nhưng các tổ chức lưu trữ dữ liệu hoạt động của họ trong cơ sở dữ liệu quan hệ. Vì vậy, cần có một công cụ có thể nhập và xuất dữ liệu từ cơ sở dữ liệu quan hệ. Đây là lý do Apache Sqoop ra đời. Sqoop có thể dễ dàng tích hợp với Hadoop và kết xuất dữ liệu có cấu trúc từ cơ sở dữ liệu quan hệ trên HDFS, khen ngợi sức mạnh của Hadoop. Đây là lý do tại sao, yêu cầu kiến ​​thức về Apache Sqoop và Flume.

Ban đầu, Sqoop được phát triển và duy trì bởi Cloudera. Sau đó, vào ngày 23 tháng 7 năm 2011, nó được Apache ấp ủ. Vào tháng 4 năm 2012, dự án Sqoop được quảng bá là dự án cấp cao nhất của Apache.





Trong blog hướng dẫn Apache Flume này, chúng tôi sẽ đề cập đến:



Toán tử <> trong sql

Chúng tôi sẽ bắt đầu hướng dẫn Apache Sqoop này bằng cách giới thiệu Apache Sqoop. Sau đó, chúng ta sẽ hiểu những lợi thế của việc sử dụng Apache Sqoop.

Hướng dẫn sử dụng Apache Sqoop: Giới thiệu Sqoop

Apache Sqoop - Hướng dẫn Apache Sqoop - EdurekaNói chung, các ứng dụng tương tác với cơ sở dữ liệu quan hệ bằng cách sử dụng RDBMS, và do đó điều này làm cho cơ sở dữ liệu quan hệ trở thành một trong những nguồn quan trọng nhất tạo ra Dữ liệu lớn. Dữ liệu như vậy được lưu trữ trong Máy chủ RDB trong cấu trúc quan hệ. Ở đây, Apache Sqoop đóng một vai trò quan trọng trong , cung cấp sự tương tác khả thi giữa máy chủ cơ sở dữ liệu quan hệ và HDFS.

Vì vậy, Apache Sqoop là một công cụ trong được thiết kế để chuyển dữ liệu giữa HDFS (Lưu trữ Hadoop) và các máy chủ cơ sở dữ liệu quan hệ như MySQL, Oracle RDB, SQLite, Teradata, Netezza, Postgres, v.v. Apache Sqoop nhập dữ liệu từ cơ sở dữ liệu quan hệ sang HDFS và xuất dữ liệu từ HDFS sang cơ sở dữ liệu quan hệ. Nó truyền dữ liệu hàng loạt giữa Hadoop và các kho dữ liệu bên ngoài một cách hiệu quả như kho dữ liệu doanh nghiệp, cơ sở dữ liệu quan hệ, v.v.



Đây là cách Sqoop có tên - “ SQ L để Có mở & Hadoop sang SQL ”.

Ngoài ra, Sqoop được sử dụng để nhập dữ liệu từ các kho dữ liệu bên ngoài vào các công cụ của hệ sinh thái Hadoop như Hive & HBase .

Bây giờ, như chúng ta đã biết Apache Sqoop là gì. Vì vậy, hãy cùng chúng tôi tìm hiểu về hướng dẫn Apache Sqoop và hiểu lý do tại sao Sqoop được các tổ chức sử dụng rộng rãi.

Hướng dẫn sử dụng Apache Sqoop: Tại sao nên sử dụng Sqoop?

Đối với nhà phát triển Hadoop, trò chơi thực sự bắt đầu sau khi dữ liệu được tải trong HDFS. Họ chơi xung quanh dữ liệu này để có được nhiều hiểu biết khác nhau ẩn trong dữ liệu được lưu trữ trong HDFS.

Vì vậy, đối với phân tích này, dữ liệu nằm trong hệ thống quản lý cơ sở dữ liệu quan hệ cần được chuyển sang HDFS. Nhiệm vụ của văn bản mã để nhập và xuất dữ liệu từ cơ sở dữ liệu quan hệ sang HDFS là không thú vị và tẻ nhạt. Đây là nơi Apache Sqoop đến để giải cứu và xóa bỏ nỗi đau của họ. Nó tự động hóa quá trình nhập và xuất dữ liệu.

Sqoop giúp cuộc sống của các nhà phát triển trở nên dễ dàng bằng cách cung cấp CLI để nhập và xuất dữ liệu. Họ chỉ cần cung cấp thông tin cơ bản như xác thực cơ sở dữ liệu, nguồn, đích, hoạt động, v.v. Nó sẽ lo phần còn lại.

Sqoop chuyển đổi nội bộ lệnh thành các tác vụ MapReduce, sau đó được thực thi qua HDFS. Nó sử dụng khung YARN để nhập và xuất dữ liệu, cung cấp khả năng chịu lỗi trên chế độ song song.

Ở phần trước trong blog Hướng dẫn về Sqoop này, chúng ta sẽ hiểu các tính năng chính của Sqoop và sau đó chúng ta sẽ chuyển sang kiến ​​trúc Apache Sqoop.

Hướng dẫn Apache Sqoop: Các tính năng chính của Sqoop

Sqoop cung cấp nhiều tính năng nổi bật như:

  1. Hết chỗ : Apache Sqoop có thể tải toàn bộ bảng bằng một lệnh duy nhất. Bạn cũng có thể tải tất cả các bảng từ cơ sở dữ liệu bằng một lệnh duy nhất.
  2. Tăng dần Tải : Apache Sqoop cũng cung cấp cơ sở tải gia tăng, nơi bạn có thể tải các phần của bảng bất cứ khi nào nó được cập nhật.
  3. Song song, tương đông nhập khẩu xuất khẩu : Sqoop sử dụng khung YARN để nhập và xuất dữ liệu, cung cấp khả năng chịu lỗi trên tính song song.
  4. Nhập khẩu các kết quả của SQL truy vấn : Bạn cũng có thể nhập kết quả trả về từ truy vấn SQL trong HDFS.
  5. Nén : Bạn có thể nén dữ liệu của mình bằng cách sử dụng thuật toán deflate (gzip) với đối số –compress hoặc bằng cách chỉ định đối số –compression-codec. Bạn cũng có thể tải bảng nén trong Apache Hive .
  6. Kết nối cho tất cả chính RDBMS Cơ sở dữ liệu : Apache Sqoop cung cấp các đầu nối cho nhiều cơ sở dữ liệu RDBMS, bao phủ gần như toàn bộ chu vi.
  7. Kerberos Bảo vệ Hội nhập : Kerberos là một giao thức xác thực mạng máy tính hoạt động trên cơ sở 'vé' để cho phép các nút giao tiếp qua mạng không an toàn để chứng minh danh tính của chúng với nhau một cách an toàn. Sqoop hỗ trợ xác thực Kerberos.
  8. Tải dữ liệu trực tiếp thành HIVE / HBase : Bạn có thể tải dữ liệu trực tiếp vào Apache Hive để phân tích và cũng kết xuất dữ liệu của bạn trong HBase, một cơ sở dữ liệu NoSQL.
  9. Ủng hộ cho Tích lũy : Bạn cũng có thể hướng dẫn Sqoop nhập bảng trong Accumulo thay vì một thư mục trong HDFS.

Kiến trúc là một kiến ​​trúc mang lại cho Apache Sqoop những lợi ích này. Bây giờ, khi chúng ta đã biết các tính năng của Apache Sqoop, hãy tiếp tục và hiểu kiến ​​trúc và hoạt động của Apache Sqoop.

Apache Sqoop Tutorial: Sqoop Architecture & Working

Hãy cho chúng tôi hiểu cách Apache Sqoop hoạt động bằng sơ đồ dưới đây:

Công cụ nhập nhập các bảng riêng lẻ từ RDBMS sang HDFS. Mỗi hàng trong bảng được coi như một bản ghi trong HDFS.

Khi chúng tôi gửi lệnh Sqoop, nhiệm vụ chính của chúng tôi được chia thành các nhiệm vụ phụ được xử lý nội bộ bởi Nhiệm vụ bản đồ riêng lẻ. Nhiệm vụ bản đồ là nhiệm vụ con, nhập một phần dữ liệu vào Hệ sinh thái Hadoop. Nói chung, tất cả các tác vụ Bản đồ đều nhập toàn bộ dữ liệu.

Xuất khẩu cũng hoạt động theo cách tương tự.

Công cụ xuất xuất một tập hợp các tệp từ HDFS trở lại RDBMS. Các tệp được cung cấp làm đầu vào cho Sqoop chứa các bản ghi, được gọi là các hàng trong bảng.

Khi chúng tôi gửi Công việc của mình, công việc đó được ánh xạ vào Công việc bản đồ, mang đến một phần dữ liệu từ HDFS. Các phần này được xuất tới đích dữ liệu có cấu trúc. Kết hợp tất cả các phần dữ liệu được xuất này, chúng tôi nhận được toàn bộ dữ liệu tại đích, trong hầu hết các trường hợp là RDBMS (MYSQL / Oracle / SQL Server).

Pha giảm được yêu cầu trong trường hợp tổng hợp. Tuy nhiên, Apache Sqoop chỉ nhập và xuất dữ liệu mà nó không thực hiện bất kỳ tổng hợp nào. Công việc lập bản đồ khởi chạy nhiều người lập bản đồ tùy thuộc vào số lượng do người dùng xác định. Đối với nhập Sqoop, mỗi tác vụ ánh xạ sẽ được chỉ định với một phần dữ liệu được nhập. Sqoop phân phối dữ liệu đầu vào giữa những người lập bản đồ một cách đồng đều để có được hiệu suất cao. Sau đó, mỗi người lập bản đồ tạo kết nối với cơ sở dữ liệu bằng cách sử dụng JDBC và tìm nạp phần dữ liệu được gán bởi Sqoop và ghi nó vào HDFS hoặc Hive hoặc HBase dựa trên các đối số được cung cấp trong CLI.

Bây giờ chúng ta đã hiểu về kiến ​​trúc và hoạt động của Apache Sqoop, hãy cùng tìm hiểu sự khác biệt giữa Apache Flume và Apache Sqoop.

Hướng dẫn Apache Sqoop: Flume vs Sqoop

Sự khác biệt chính giữa Flume và Sqoop là:

  • Flume chỉ nhập dữ liệu phi cấu trúc hoặc dữ liệu bán cấu trúc vào HDFS.
  • Trong khi Sqoop có thể nhập cũng như xuất dữ liệu có cấu trúc từ kho dữ liệu RDBMS hoặc Enterprise sang HDFS hoặc ngược lại.

Bây giờ, tiến bộ trong Hướng dẫn Apache Sqoop của chúng tôi, đã đến lúc thực hiện các lệnh Apache Sqoop.

làm thế nào để chuyển đổi double sang int

Hướng dẫn sử dụng Apache Sqoop: Lệnh Sqoop

  • Sqoop - Lệnh IMPORT

Lệnh nhập được sử dụng để nhập một bảng từ cơ sở dữ liệu quan hệ sang HDFS. Trong trường hợp của chúng tôi, chúng tôi sẽ nhập các bảng từ cơ sở dữ liệu MySQL sang HDFS.

Như bạn có thể thấy trong hình dưới đây, chúng tôi có bảng nhân viên trong cơ sở dữ liệu nhân viên mà chúng tôi sẽ nhập vào HDFS.

Lệnh để nhập bảng là:

sqoop import --connect jdbc: mysql: // localhost / staff --username edureka --table staff

Như bạn có thể thấy trong hình dưới đây, sau khi thực hiện lệnh này, các tác vụ của bản đồ sẽ được thực thi ở phía sau.

Sau khi mã được thực thi, bạn có thể kiểm tra giao diện người dùng Web của HDFS, tức là localhost: 50070 nơi dữ liệu được nhập.

  • Sqoop - Lệnh IMPORT với thư mục đích

Bạn cũng có thể nhập bảng vào một thư mục cụ thể trong HDFS bằng lệnh dưới đây:

nhập sqoop - kết nối jdbc: mysql: // localhost / staff - tên người dùng edureka --table nhân viên --m 1 --target-dir / nhân viên

Sqoop nhập dữ liệu song song từ hầu hết các nguồn cơ sở dữ liệu. -m thuộc tính được sử dụng để chỉ định số lượng ánh xạ sẽ được thực thi.

Sqoop nhập dữ liệu song song từ hầu hết các nguồn cơ sở dữ liệu. Bạn có thể chỉ định số tác vụ bản đồ (các quy trình song song) sẽ sử dụng để thực hiện nhập bằng cách sử dụng -m hoặc là –Num-mappers tranh luận. Mỗi đối số này nhận một giá trị nguyên tương ứng với mức độ song song để sử dụng.

Bạn có thể kiểm soát số lượng ánh xạ một cách độc lập với số lượng tệp có trong thư mục. Hiệu suất xuất khẩu phụ thuộc vào mức độ song song. Theo mặc định, Sqoop sẽ sử dụng song song bốn tác vụ cho quá trình xuất. Điều này có thể không phải là tối ưu, bạn sẽ cần phải thử nghiệm với thiết lập cụ thể của riêng mình. Các tác vụ bổ sung có thể cung cấp khả năng đồng thời tốt hơn, nhưng nếu cơ sở dữ liệu đã bị tắc nghẽn khi cập nhật chỉ số, gọi trình kích hoạt, v.v. thì tải bổ sung có thể làm giảm hiệu suất.

Bạn có thể thấy trong hình ảnh bên dưới, rằng số tác vụ lập bản đồ là 1.

Số lượng tệp được tạo trong khi nhập bảng MySQL bằng số lượng trình ánh xạ được tạo.

  • Sqoop - Lệnh IMPORT với Mệnh đề Where

Bạn có thể nhập một tập hợp con của bảng bằng mệnh đề 'where' trong công cụ nhập Sqoop. Nó thực hiện truy vấn SQL tương ứng trong máy chủ cơ sở dữ liệu tương ứng và lưu trữ kết quả trong thư mục đích trong HDFS. Bạn có thể sử dụng lệnh sau để nhập dữ liệu với ‘ Ở đâu Mệnh đề ‘:

sqoop import --connect jdbc: mysql: // localhost / staff - tên người dùng edureka --table nhân viên --m 3 --where 'emp_no & gt 49000' --target-dir / Latest_Empleteees

  • Sqoop - Nhập gia tăng

Sqoop cung cấp chế độ nhập gia tăng có thể được sử dụng để chỉ truy xuất các hàng mới hơn một số nhóm hàng đã nhập trước đó. Sqoop hỗ trợ hai kiểu nhập gia tăng: nối thêmSửa đổi lần cuối . Bạn có thể sử dụng đối số –incremental để chỉ định loại nhập tăng dần để thực hiện.

Bạn nên chỉ định nối thêm khi nhập một bảng trong đó các hàng mới liên tục được thêm vào với các giá trị id hàng ngày càng tăng. Bạn chỉ định cột chứa id của hàng với –Check-column . Sqoop nhập các hàng trong đó cột kiểm tra có giá trị lớn hơn giá trị được chỉ định với –Last-value .

Một chiến lược cập nhật bảng thay thế được hỗ trợ bởi Sqoop được gọi là Sửa đổi lần cuối chế độ. Bạn nên sử dụng điều này khi các hàng của bảng nguồn có thể được cập nhật và mỗi lần cập nhật như vậy sẽ đặt giá trị của cột được sửa đổi lần cuối thành dấu thời gian hiện tại.

Khi chạy một lần nhập tiếp theo, bạn nên chỉ định –Last-value theo cách này để đảm bảo bạn chỉ nhập dữ liệu mới hoặc dữ liệu cập nhật. Việc này được xử lý tự động bằng cách tạo phép nhập gia tăng dưới dạng công việc đã lưu, đây là cơ chế ưu tiên để thực hiện nhập gia tăng định kỳ.

Đầu tiên, chúng tôi đang chèn một hàng mới sẽ được cập nhật trong HDFS của chúng tôi.

Lệnh để nhập gia tăng là:

sqoop import --connect jdbc: mysql: // localhost / staff --username edureka --table staff --target-dir / Latest_Empleteees --incremental append --check-column emp_no --last-value 499999

java làm thế nào để kết thúc chương trình

Bạn có thể thấy trong hình ảnh dưới đây, một tệp mới được tạo với dữ liệu cập nhật.

  • Sqoop - Nhập tất cả các bảng

Bạn có thể nhập tất cả các bảng từ máy chủ cơ sở dữ liệu RDBMS sang HDFS. Mỗi dữ liệu bảng được lưu trữ trong một thư mục riêng biệt và tên thư mục giống như tên bảng. Điều bắt buộc là mọi bảng trong cơ sở dữ liệu đó phải có trường khóa chính. Lệnh để nhập tất cả bảng từ cơ sở dữ liệu là:

sqoop import-all-table --connect jdbc: mysql: // localhost / staff --username edureka

  • Sqoop - Cơ sở dữ liệu danh sách

Bạn có thể liệt kê các cơ sở dữ liệu có trong cơ sở dữ liệu quan hệ bằng cách sử dụng Sqoop. Công cụ cơ sở dữ liệu danh sách Sqoop phân tích cú pháp và thực hiện truy vấn 'HIỂN THỊ DỮ LIỆU' đối với máy chủ cơ sở dữ liệu. Lệnh để liệt kê cơ sở dữ liệu là:

sqoop list-databases --connect jdbc: mysql: // localhost / --username edureka

  • Sqoop - Danh sách các bảng

Bạn cũng có thể liệt kê các bảng của một cơ sở dữ liệu cụ thể trong máy chủ cơ sở dữ liệu MySQL bằng cách sử dụng Sqoop. Công cụ bảng danh sách Sqoop phân tích cú pháp và thực hiện truy vấn 'SHOW TABLES'. Lệnh để liệt kê các bảng là một cơ sở dữ liệu là:

sqoop list-table --connect jdbc: mysql: // localhost / staff --username edureka

  • Sqoop - Xuất

Như chúng ta đã thảo luận ở trên, bạn cũng có thể xuất dữ liệu từ HDFS sang cơ sở dữ liệu RDBMS. Bảng đích phải tồn tại trong cơ sở dữ liệu đích.Dữ liệu được lưu trữ dưới dạng bản ghi trong HDFS. Các bản ghi này được đọc và phân tích cú pháp và được phân tách bằng dấu phân cách do người dùng chỉ định.Hoạt động mặc định là chèn tất cả bản ghi từ tệp đầu vào vào bảng cơ sở dữ liệu bằng cách sử dụng câu lệnh INSERT. Trong chế độ cập nhật, Sqoop tạo câu lệnh UPDATE thay thế bản ghi hiện có vào cơ sở dữ liệu.

Vì vậy, trước tiên chúng ta tạo một bảng trống, nơi chúng ta sẽ xuất dữ liệu của mình.

Lệnh để xuất dữ liệu từ HDFS sang cơ sở dữ liệu quan hệ là:

sqoop export --connect jdbc: mysql: // localhost / staff --username edureka --table emp --export-dir / user / edureka / staff

  • Sqoop - Codegen

Trong ứng dụng hướng đối tượng, mỗi bảng cơ sở dữ liệu có một lớp Đối tượng Truy nhập Dữ liệu chứa các phương thức ‘getter’ và ‘setter’ để khởi tạo các đối tượng. Codegen tự động tạo ra lớp DAO. Nó tạo ra lớp DAO trong Java, dựa trên cấu trúc Lược đồ bảng.

Lệnh để tạo mã java là:

sqoop codegen --connect jdbc: mysql: // localhost / staff - tên người dùng edureka --table nhân viên

Bạn có thể thấy đường dẫn trong hình trên, nơi mã được tạo. Hãy để chúng tôi đi đường dẫn và kiểm tra các tệp đã được tạo.

Tôi hy vọng blog này là thông tin và giá trị gia tăng cho bạn. Nếu bạn quan tâm để tìm hiểu thêm, bạn có thể xem qua cho bạn biết về Dữ liệu lớn và cách Hadoop đang giải quyết các thách thức liên quan đến Dữ liệu lớn.

Bây giờ bạn đã hiểu Apache Sqoop, hãy xem của Edureka, một công ty học trực tuyến đáng tin cậy với mạng lưới hơn 250.000 người học hài lòng trải dài trên toàn cầu. Khóa đào tạo Chứng chỉ Edureka Big Data Hadoop giúp người học trở thành chuyên gia trong lĩnh vực HDFS, Yarn, MapReduce, Pig, Hive, HBase, Oozie, Flume và Sqoop bằng các trường hợp sử dụng thời gian thực trên miền Bán lẻ, Truyền thông xã hội, Hàng không, Du lịch, Tài chính.

Có một câu hỏi cho chúng tôi? Vui lòng đề cập đến nó trong phần bình luận và chúng tôi sẽ liên hệ lại với bạn.